framework 订阅
Framework,英文单词,主要用作名词,意思是“框架,骨架;结构,构架”。 展开全文
Framework,英文单词,主要用作名词,意思是“框架,骨架;结构,构架”。
信息
英式读音
[ˈfreɪmwɜːrk]
美式读音
[ˈfreɪmwɜːrk]
词    性
名词
外文名
framework
Framework短语搭配
Multimedia Framework 多媒体框架 ; 预设的多媒体框架Regulatory framework 规章制度 ; 规管架构 ; 监管框架NET Framework 独立安装程序 ; 微软 ; NET框架 ; 框架Service Framework 服务框架 ; 服务架构 ; 效劳框架framework region 构架区 ; 骨架区 ; 框架区Framework structure 架状结构 ; 框架结构 ; 构架结构 ; 骨架结构test framework 测试框架 ; 测试架framework gene 构架基因 ; 支架基因alternative framework 另有架构 ; 相异构想 ; 替代架构 ; 备选纲领 [1] 
收起全文
精华内容
参与话题
问答
  • Framework 框架 理解与分析

    千次阅读 2018-02-10 15:30:21
    2)应用程序框架层:这一层就是Framework:这一层是核心应用使用api的框架,为应用提供各种api,包括各种组件来支持开发,3)系统运行库层:分为两层:1.程序层:数据库,SGL---底层2D图形引擎,Surface Manager --...
    一,android整体架构分为四层:
    1)应用程序层
    这就是我们平常开发android用java编写的app都属于这一层,系统自带了一些app,日历等;
    2)应用程序框架层:
    这一层就是Framework:
    这一层是核心应用使用api的框架,为应用提供各种api,包括各种组件来支持开发,
    3)系统运行库层:
    分为两层:
    1.程序层:
    数据库,SGL---底层2D图形引擎,
    Surface Manager --显示子系统的管理,并未多个应用提供2D,3D图层的无缝融合
    2.android 运行库(Android Runtime)
    它包括了一个核心库,该核心库提供java变成语言核心库的大多数功能;
    还有一个虚拟机
    4)Linux内核层:
    android系统基于linux内核,

    二, Framework框架,分为服务端和客户端整理:
    服务端重要的东西:
    服务端包涵两个重要的类:
    windowManagerService(WmS)和ActivirtyManagerService(AmS)
    WmS: 控制窗口的显示与隐藏,以及窗口的程序,他是管理窗口的,大多数view都和他打交道;
    AmS: 管理所有应用程序的Activity,具有调动activity的生命周期能力,
    3) keyQ: 他是WmS的一个内部类,一旦创建就会启动一个新的线程,这个线程不断的接受读取
    用户UI的操作,并把这些消息放到消息队列中;
    4)inputDispatcherThread类
    该类一但创建就会启动一个线程,这个线程会从消息队列中不断的取出用户消息,进行过滤,
    在将这些消息发送给当前活动的客户端;

    客户端重要的类:
    ActivityThread:
    该类为应用程序的主线程类,所有程序都只有一个主线程类,ActivityThread所在的线程即为主线程。

    acitivty类: 该类为程序的最小单元,主线程动态加载可执行代码最小单元类,一个应用程序可以包含多个activity类,ActivityThread类会根据用户操作选择动态加载那个acitivty类:

    phoneWindow类:该类继承于window类,phoneWindow类包含一个decorView对象;
    因此phoneWindow是包含一个view对象,并提供一组通用的api

    window类: 该类提供了一组通用窗口操作api,仅仅是客户端的,wms所管理的窗口并不是window类;而是一个view或者viewGroup类

    DecorView类:该类是一个Fragment子类,并且是phoneWindow的一个内部类,

    ViewRoot类:Wms管理窗口时,需要客户端进行某种操作,这时需要ipc调用完成,客户端收到ipc调用,会把该调用转换为本地的一个异步调用,通过handler实现,viewRoot继承handler,
    所以viewRoot主要作用是把Wms的ipc调用转为本地的一个异步调用;

    W类:该类继承Binder,是viewRoot的一个内部类,当通过ipc调用时,会调用该binder类,然后
    会给该类所在viewRoot类发送一个handler消息,以便进行异步处理;

    WindowManager类:当客户端需要申请一个窗口,具体创建窗口的任务是由Wms完成的,
    windowManager相当于Wms和客户端的桥梁,客户端不能直接和wMS进行交互;


    Framework是我们学习安卓,想要有一定见解的话,一定要了解的知识,学习了,就是一种收获。

    展开全文
  • Android Framework入门介绍

    万次阅读 多人点赞 2018-03-13 09:37:56
    framework概述Android简介 Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要...

    framework概述

    Android简介

          Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。20058月由Google收购注资。200711月,Google84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良 Android系统,随后GoogleApache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008 10,随后,Android逐渐扩展到平板电脑及其他领域上,如电视数码相机游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%

         开发者能使用Android SDK为Android platform开发应用,这些应用使用JAVA语言书写,运行在虚拟机(一个专为手机程序开发的基于linux内核的JAVA虚拟机)上。 

    Android架构


            Android架构主要分为分为四部分,从下往上以此为LINUX KERNEL(内核层),LIBRARIES(共享库,以及android运行时库),APPLICATION FRAMEWORK(应用框架层),APPLICATION(应用程序)。而本文主要分析就是APPLICATION FRAMEWORK(应用框架层)。

      APPLICATION

          主要为系统中的应用,如桌面,闹铃,设置,日历,电话,短信等系统应用。

      APPLICATION FRAMEWORK

          Android的应用程序框架为应用程序层的开发者提供APIs,它实际上是一个应用程序的框架。由于上层的应用程序是以JAVA构建的,因此本层次提供了以下服务:

    i. 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器;

    ii. 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据;

    iii. 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layout files );

    iv. 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息;

    v. 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。

     Android Runtime

          Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。

     Libraries

    Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:

    i. 系统 C 库:一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。

    ii. 媒体库:基于 PacketVideo OpenCORE。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。

    iii. Surface Manager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。

    iv. LibWebCore:一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。

    v. SGL:底层的2D图形引擎

    vi. 3D libraries:基于OpenGL ES 1.0 APIs实现,该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。

    vii. FreeType:位图(bitmap)和矢量(vector)字体显示。

    SQLite:一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

     Linux Kernel

          Android 的核心系统服务依赖于 Linux 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。

    framework简介

    系统服务

          SystemServer 是framework中非常重要的一个进程,它是在虚拟机启动后运行的第一个java进程,SystemServer启动其他系统服务,这些系统服务都是以一个线程的方式存在于SystemServer进程中。 

    a) EntropyService 提供伪随机数

    b) PowerManagerService 电源管理服务

    c) ActivityManagerService 最核心的服务之一,管理Activity

    d) TelephonyRegistry 通过该服务注册电话模块的事件响应,比如重启、关闭、启动等

    e) PackageManagerService 程序包管理服务

    f) AccountManagerService 账户管理服务,是指联系人账户,而不是Linux系统的账户 

    g) ContentService ContentProvider服务,提供跨进程数据交换

    h) BatteryService 电池管理服务

    i) LightsService 自然光强度感应传感器服务

    j) VibratorService 震动器服务 

    k) AlarmManagerService 定时器管理服务,提供定时提醒服务

    l) WindowManagerService Framework最核心的服务之一,负责窗口管理

    m) BluetoothService 蓝牙服务

    n) DevicePolicyManagerService 提供一些系统级别的设置及属性

    o) StatusBarManagerService 状态栏管理服务

    p) ClipboardService 系统剪切板服务

    q) InputMethodManagerService 输入法管理服务

    r) NetStatService 网络状态服务

    s) NetworkManagementService 网络管理服务

    t) ConnectivityService 网络连接管理服务

    u) AccessibilityManagerService 辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果

    v) MountService 挂载服务,可通过该服务调用Linux层面的mount程序

    w) NotificationManagerService 通知栏管理服务,Android中的通知栏和状态栏在一起,只是界面上前者在左边,后者在右边

    x) DeviceStorageMonitorService 磁盘空间状态检测服务

    y) LocationManagerService 地理位置服务

    z) SearchManagerService 搜索管理服务

    aa) DropBoxManagerService 通过该服务访问Linux层面的Dropbox程序

    ab) WallpaperManagerService 墙纸管理服务,墙纸不等同于桌面背景,在View系统内部,墙纸可以作为任何窗口的背景 

    ac) AudioService 音频管理服务

    ad) BackupManagerService 系统备份服务

    ae) AppWidgetService         Widget服务

    af) RecognitionManagerService 身份识别服务

    ag) DiskStatsService 磁盘统计服务

    核心服务介绍

    a) ActivityManagerService

    ActivityManagerService(以下简称:AMS)是android系统的一个系统服务,是应用进程的管理服务端,直接的控制了应用程序的各个行为,保证了系统中不同的应用程序之间能够和谐的合理的进行调度运行。

    AMS是android上层系统最核心的模块之一,其主要的工作是对所有的应用进程及其进程中的四大组件进行管理。(当然这里面也涉及了一些window、电源、权限等内容)

    对进程的管理包括:进程的创建与销毁、进程的优先级调整。

    对组件的管理包括:Activity的调度管理、Service的管理、Broadcast的分发、以及ContentProvider管理。

                                 

    b) WindowManagerService

    对系统中所有窗口进行管理;动画处理 ;Input分发、处理;Display管理(多屏显示) 。

    c) Android Graphics系统

                      

    a) Surfaceflinger

    负责Layer合成(composer);创建surface;管理surface。

    b) PackageManagerService

    负责Package的管理,应用程序的安装 、卸载、信息查询等。

                                         

    c) Input系统

    android的输入系统主要完成键盘、触屏、鼠标等输入设备的事件输入及向焦点窗口和焦点视图的事件派发,插入,过滤,拦截等功能。

    android支持的输入设备主要有:键盘、鼠标、触摸屏、轨迹球、游戏摇杆/手柄、绘图板。


    Framework的范围

    Framework负责APPLICATION FRAMEWORKANDROID RUNTIMELIBRARIES三部分。

    a) 系统ManagerService相关内容

    b) 系统接口和jni相关内容

    c) 系统功能相关内容(watchdogvoldbinder等)

    d) 虚拟机dalvikart

    e) 系统so库相关内容

    f) CTSGTS等预分析

    g) Monkey预分析

    h) 系统稳定性问题(系统ANR、冻屏、重启、蓝屏等)

    i) 系统性能问题

    framework基础

    语言基础:JavaC++C

    技术基础:进程间通信,多线程,jnilinux相关知识,binder

    Linux入门介绍

        由于在进行framework工作时,代码的下载和管理主要在Ubuntu下面进行比较方便,所以在搞framework之前需要对linux系统有所了解,会使用一些常用命令。linux是基于shell命令行操作,shell是系统的一个工具。用户直接面对的不是计算机硬件而是shell,用户想操作计算机硬件,需先把指令告诉shell,shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。


    启动shell界面,快捷键Ctrl+Atl+t或者可以点击桌面左上角的图标进行搜索“终端”如下图,点击终端就可以出现shell终端。


          当启动一个shell时,默认目录为/home/username/:可以使用pwd来查看当前的目录。


          当系统第一次启动,且能连上internet,先更新系统的软件库信息,使用命令sudo apt-get update,sudo为使用管理员权限,第一次执行时需要输入系统的开机密码,之后五分钟内不需要输入密码,过了五分钟需要再次输入密码。


        等更新完成后,就可以开始安装软件了,例:安装git,可以sudo apt-get install git进行安装,非常简便。install是安装系统中存在安装包的软件。


    如果我们从网上下载一个deb的软件包sudo dpkg -i .deb软件包


    命令:sudo dpkg -i xxx.deb,安装xxx软件包与apt-get install 安装方式的区别:

    dpkg方式
    apt-get install方式
    手动下载deb软件包自动下载deb软件包
    手动指定软件包下载路径自动下载到/var/cache/apt/archive/下
    手动执行sudo dpkg -i xxx.deb安装自动执行dpkg安装命令
    一般在做framework开发时都会有一个代码服务器专门放置一些系统源码,而该服务器是没有显示器的,我们只能远程登录到服务器上进行查看代码,这时就需要安装远程终端访问软件:ssh

    安装方法:sudo apt-get install openssh-server

    用法:ssh username@ip


    当我们想从服务器copy文件到我们本地,我们可以使用scp命令:scp username@ip:/文件位置,

    或者scp -r username@ip:/文件夹位置,就可以轻松复制文件,同理也可以将本地文件copy到服务器。


    LINUX常用命令请查看博客(Linux常用命令

    Android代码管理

    代码结构

          framework开发工作方式与应用开发的工作方式是完全不同的,framework开发是基于Android源代码进行的开发,版本管理主要使用:git,repo两种工具。如果想要学习framework开发,必须需要下载一套Android源码。官方下载地址【参考、需翻墙】: https://source.android.com/source/downloading.html,具体的下载编译调试代码的方式可以参考老罗的博客视频,讲解的非常清楚,附上地址(http://0xcc0xcd.com/p/index.php),感谢老罗。

        当下载完成代码后首先了解一下Android源代码的结构:

    ├── bionic    android上实现的libc库
    ├── bootable  存放可启动项,如recovery、bootloader等
    ├── build     android编译系统所用到的make文件及其它工具
    ├── cts       android兼容性测试
    ├── dalvik    dalvik虚拟机
    ├── development  与开发相关的一些东西
    ├── device    存放需要适配的设备信息
    ├── external  第三方库
    ├── frameworks  framework部分
    ├── hardware  硬件相关代码
    ├── kernel    kernel相关代码
    ├── libcore   android上实现的Java基础库
    ├── Makefile
    ├── ndk
    ├── out       编译输出目录
    ├── packages  包含系统应用、壁纸应用、内容提供者、输入法等
    ├── prebuilt  预编译好的工具
    ├── sdk       sdk相关内容
    ├── system    操作系统层次的一些可执行程序和配置文件
    ├── u-boot    用于引导linux启动的u-boot
    └── vendor    存放与厂商相关的信息,也可粗放需要适配的设备信息

    而framework开发主要要了解的就是frameworks下面的内容。

    代码编译

    当把代码下载完毕后需要对源代码整体进行编译,具体方法如下:

    1.source build/envsetup.sh
      读取各个board的vendorsetup.sh
    2.lunch
       去选择要编译的对象

    3.完整系统编译,输出到out/target/product/<device>/...

          make -j4(j4为使用四个线程同时编译)

    4.如果要单编某个模块,就是用如下命令来编译需要的模块。

       编译bootloader,
          make bootloader
       编译kernel生成boot.img,
          make bootimage
       编译system生成system.img,
          make systemimage
       编译userdata生成userdata.img,
          make userdataimage
       编译recovery生成recovery.img,

          make recoveryimage

    当编译好对应的image后,可以使用fastboot将image烧到手机里面:

    如何进入fastboot:
       开机状态下执行adb reboot bootloader
       关机状态组合键:home+power
    1.检查连接设备
         Fastboot devices
    2.烧写system.img
       Fastboot flash system system.img
    3.烧写boot.img(recovery)
       fastboot flash boot boot.img(recovery.img)
    4.烧写bootloader

        Fastboot flash 2ndbl u-boot.bin

    常用工具以及调试方法

    详细参考Framework工具及调试方法

    Android启动流程分析

          根据上文分析Android分为四个层次,而系统如何从长按power开机进入系统桌面的呢,系统都进过了哪些流程,framework从中起到了什么的作用,请参考之前的Android启动流程系列文章

    展开全文
  • Framework简介

    2019-10-29 16:14:42
    这里写自定义目录标题简单介绍framework在Android系统的位置Android架构图Android系统源码中的framework重要类及其介绍服务端客户端Linux驱动从apk程序的运行过程,去看看上面各个组件在啥时候干啥活的源码地址...

    简单介绍framework在Android系统的位置

    1 Android架构图

    在这里插入图片描述
    Android架构分为四层

    1. Application
    2. Application Framework
    3. Library Android Runtime
    4. Linux Kernel

    1 源码的目录结构

    android源码的结构图

    链接:https://blog.csdn.net/yui_hatano/article/details/89517165

    • bionic android上实现的libc库
    • bootable 存放可启动项,如recovery、bootloader等
    • build android编译系统所用到的make文件及其它工具
    • cts android兼容性测试
    • dalvik dalvik虚拟机
    • development 与开发相关的一些东西
    • device 存放需要适配的设备信息
    • external 第三方库
    • frameworks framework部分**
    • hardware 硬件相关代码
    • kernel kernel相关代码
    • libcore android上实现的Java基础库
    • Makefile
    • ndk
    • out 编译输出目录
    • packages 包含系统应用、壁纸应用、内容提供者、输入法等
    • prebuilt 预编译好的工具
    • sdk sdk相关内容
    • system 操作系统层次的一些可执行程序和配置文件
    • u-boot 用于引导linux启动的u-boot
    • vendor 存放与厂商相关的信息,也可粗放需要适配的设备信息

    android framework的结构图

    应用程序框架层,这一层为上层应用提供各种api,提供各种组件和服务来支持我们的Android开发。

    framework开发相关的代码主要集中在framework/base下面。

    • frameworks/av 多媒体框架
    • frameworks/base
      • api/ 全是xml文件,定义了api
      • cmds/ android中重要的命令,如am,app_proce
      • config/ 10-Aug-2018 4 KiB
      • core/ 核心库
        • java/ java库
        • jni/ jni层
        • proto/ 协议层
        • res/ 资源文件
        • tests/ 测试工具
      • data/ 声音字体等数据文件
      • docs/ 文档
      • drm/ 数字版权管理
      • graphics/ 图形图像
      • keystore/ 数字签名证书相关
      • libs/ 库
        • androidfw/ FW功能库
        • common_time/ 常用功能和工具集合
        • hwui/ 硬件渲染库
        • incident/ 事件驱动机制库
        • input/ 输入库
        • protoutil/ (7.0有,5.0没有)
        • services/ 服务库
        • storage/ 存储库
        • usb/ USB库
      • location/ 地理位置
      • lowpan/ (7.0有,5.0没有)
      • media/ 多媒体
      • native/ 本地库
      • nfc-extras/ nfc相关
      • obex/ 蓝牙传输
      • opengl/ opengl相关
      • packages/ 设置,TTS,VPN程序
      • proto/ 协议框架
      • rs/ 资源框架
      • samples/ 示例
      • sax/ xml解析器
      • services/ Android的服务
      • telecomm/ telecom通讯框架
      • telephony/ 电话相关
      • test-base/ base的测试
      • test-legacy/ 安全相关的测试
      • test-mock/ (7.0有,5.0没有)
      • test-runner/ 测试相关
      • tests/ 测试相关
      • tools/ 工具
      • vr/ VR相关(7.0有,5.0没有)
      • wifi/ 无线网络

    3 源码中的framework重要类

    下面是一些系统中常见的类及其功能介绍,通读一遍会对理解Android源码很有帮助。

    分类 重要的类 简介 作用
    消息处理类(非服务端) KeyQ类 该类是WmS的内部类,继承自KeyInputQueue 一旦创建就立即启动一个线程,该线程会不断读取用户UI操作消息,比如按键、触摸屏、等,并把这些消息放到一个消息队列QueueEvent类中
    消息处理类(非服务端) InputDispatcherThread 该类是WmS的内部类,继承自KeyInputQueue 一旦创建就立即启动一个线程,该线程会不断读取用户UI操作消息,比如按键、触摸屏、等,并把这些消息放到一个消息队列QueueEvent类中
    服务端 ActivityManagerService 内存管理,进程管理,统一调度所有应用程序中的Activity 所有Activity的启动必须通知AmS,AmS也决定了某个进程会不会被杀死。
    服务端 WindowManagerService 管理所有的窗口 包括创建删除窗口,隐藏显示窗口,决定窗口的层级顺序,指定当前正在与应用程序交互的窗口。
    客户端 ActivityThread 主线程类 即UI线程类 所有的处理用户消息,以及绘制页面的工作都在该线程中完成。
    客户端 Activity apk运行的最小单位 ActivityThread会根据用户的操作选择让哪个Activity对象上它的船。
    客户端 Window 富一代,长得比较抽象,喜欢制定规则 提供了一些通用的窗口操作API。
    客户端 PhoneWindow 富二代,继承于牛气的Window类,自己屋里住着一个DecorView对象 像它老爸喜欢制定规则提供了一些通用窗口操作API。
    客户端 DecorView 很能干的家伙,家产来自FrameLayout,比较注重外在喜欢打扮 对FrameLayout进行了一些修饰
    客户端 ViewRoot类 小管家。继承于Handler 主要作用是把WMS的IPC调用转换为本地的一个异步调用。内部还有 ViewRootHandler 继承于Handler,所以当W类收到消息以后可以发送给UI线程,界面的绘制发起点也在此。
    客户端 W类 ViewRoot小助手,继承于binder,是ViewRoot内部类。 主要帮助ViewRoot实现把WMS的IPC调用转换为本地的一个异步调用。
    客户端 WindowsManager 客户端与WMS的中介 客户端如果想创建一个窗口得先告诉WindowManager一声,然后它再和WindowManagerService交流一下看看能不能创建,客户端不能直接和WMS交互

    4 Android framework形象化理解之:三个小伙伴

    Android framework包含三个小伙伴:服务端、客户端、linux驱动。

    服务端

    (1)ActivityManagerService(Ams):内存管理,进程管理,统一调度所有应用程序中的Activity。所有Activity的启动必须通知AmS,AmS也决定了某个进程会不会被杀死。

    (2)WindowManagerService(Wms):管理所有的窗口,包括创建删除窗口,隐藏显示窗口,决定窗口的层级顺序,指定当前正在与应用程序交互的窗口。

    客户端

    (1)ActivityThread类 主线程类 即UI线程类,所有的处理用户消息,以及绘制页面的工作都在该线程中完成。

    (2)Activity类,apk运行的最小单位,ActivityThread会根据用户的操作选择让哪个Activity对象上它的船。

    (3)Window:富一代,长得比较抽象,喜欢制定规则,提供了一些通用的窗口操作API。

    (4)PhoneWindow类 :富二代,继承于牛气的Window类,自己屋里住着一个DecorView对象,像它老爸喜欢制定规则提供了一些通用窗口操作API。

    (5)DecorView:很能干的家伙,家产来自FrameLayout,比较注重外在喜欢打扮,DecorView是对FrameLayout进行了一些修饰,从名字就可以看出来。

    (6)ViewRoot类 :小管家。继承于Handler,主要作用是把WMS的IPC调用转换为本地的一个异步调用。内部还有 ViewRootHandler 继承于Handler,所以当W类收到消息以后可以发送给UI线程,界面的绘制发起点也在此。

    (7)W类:ViewRoot小助手,继承于binder,是ViewRoot内部类。主要帮助ViewRoot实现把WMS的IPC调用转换为本地的一个异步调用。

    (8)WindowsManager :客户端如果想创建一个窗口得先告诉WindowManager一声,然后它再和WindowManagerService交流一下看看能不能创建,客户端不能直接和WMS交互。

    Linux驱动

    Linux驱动和Framework相关的主要是两个部分:画家SurfaceFlingger和快递员Binder。

    每一个窗口都对应一个画Surface,SurfaceFlingger负责将各个画面显示到屏幕上,Binder负责进程间通信。

    5 Framework启动分析

    zygote(SocSystemServer(ActivityManapp创建创建你,帮我管理SocketClient请求开启新的进程启动appapp要启动创建新的android虚拟机,启动appzygote(SocSystemServer(ActivityManapp

    6 应用程序启动分析

    在计算机的世界里每个程序都有一个main()方法,程序代码都是从main()方法开始执行,Android应用程序也不例外。

    1. 当应用程序启动时,系统首先会为其创建一个Dalvik虚拟机进程,并加载APK应用程序类及资源。
    2. 然后APK应用程序从ActivityThred的main()方法处开始执行。
      首先,main()方法为UI线程创建一个消息队列(MessageQueue)。
      然后,创建ActivityThread对象,ActivityThread初始化时会创建一个Handler和一个Binder。(Binder负责接收远程AmS的IPC调用,接收到调用后通过Handler将消息发送到消息队列,UI主线程会异步地从消息队列中取出消息并执行相应操作,比如start,stop,pause等)
      接着,UI主线程调用Looper.loop()方法进入消息循环体,进入后就会不断从消息队列中读取并处理消息。( ActivityThread是APK程序的UI线程,也就是我们所说的主线程。主线程要求执行时间不能超过5秒,超过就会报ANR,这个5秒就是UI线程消息队列循环一次的最大时间阈值)
    3. 当ActivityThread接收到AmS发送的start某个Activity消息后,就会创建指定Activity对象。Activity又会创建PhoneWindow类,PhoneWindow创建DecorView,DecorView内部包含Activity.setContentView(R.layout.xxx)指定的布局。
    4. 创建完成后,Activity需要将布局显示在屏幕上,于是调用WindowManager.addView()方法。WindowManager为Activity对应的窗口(Window)创建一个ViewRoot对象(每一个窗口对应一个ViewRoot对象),然后调用WmS提供的远程接口将窗口(布局)显示到屏幕上。至此应用程序中的Activity就显示在屏幕上了。

    APK中的线程

      在现在操作系统中,任何应用程序都运行在线程之中。客户端在启动时系统会首先为其分配一个线程,然后该线程从程序的入口处开始执行。对于包含Activity的客户端程序,至少包含三个线程:
    
    1. 主线程,又称UI线程,也就是应用程序本身所在的线程,主要用于处理用户消息以及绘制程序界面。
    2. ViewRoot.W对象对应的线程,Activity启动后会创建一个ViewRoot.W对象,W对象继承自Binder,因此会启动一个对象负责接收Linux Binder驱动的IPC调用。
    3. ApplicationThread对象所对应的线程,该对象也继承自Binder,因此也会启动一个线程用于IPC调用。

    自定义Thread与UI线程的区别

    客户端小伙伴至少包含三个线程小弟,Activity启动后会创建一个ViewRoot.W对象,同时ActivityThread会创建一个ApplicationThread对象,这两个对象继承消息总管Binder,每个Binder对应一个线程,负责接收Linux Binder驱动发送的IPC调用。还有一个是UI线程呗。

    对于UI线程,在启动时已经创建了消息队列(MessageQueue),既在ActivityThread的main()方法中已经使用Looper.prepareMainLooper()方法为UI线程添加了Looper对象。程序员可以直接在Activity中定义Handler对象发送处理消息。

    而对于普通线程,需要手动调用Looper.prepareLooper()方法为Thread创建消息队列,这样才能定义Handler处理消息。即不能直接在Thread中定义Handler。

    从使用场景上说,就是不能直接给Thread对象发消息,但是却可以给UI线程发消息。

    UI线程是从ActivityThread运行的,在该类的main()方法中已经使用了Looper.prepareMainLooper()为该线程添加了Looper对象,已经为该线程创建了消息队列,是自带秘书光环的。因此,我们才可以在Activity中去定义Handler对象,因为创建Handler对象时其线程必须已经创建了消息队列,装卸工得配运输带要不然没法干活。而普通的Thread则没有默认创建消息队列,所以不能直接在Thread中直接定义Handler,这个就是我们不懂程序运行原理导致的困惑。

    7 从apk程序的运行过程,去看看三个小伙伴的工作

    1 ActivityThread从main()函数中就开始动起来,然后调用prepareMainLooper()为UI线程创建一个消息快递通道即MessageQueue。

    2 接着创建ActivityThread对象,创建过程会创建一个消息装卸工Handler对象和一个快递员Binder对象。其中Binder负责接收远程Ams的IPC调用,接收到调用后让Handler把消息装到消息快递队列,UI线程很忙的都是异步的从消息快递队列中取出消息并执行相应操作,比如 start、stop、pause。

    3 UI线程让队列调用Looper.loop()方法进入消息循环体,进入后就会不断地从消息队列中读取并处理消息。

    4 当ActivityThread接收到Ams发送start某个Activity的快递后就会创建指定的Activity对象。Activity会先按窗户再去按玻璃和贴窗花,所以先创建PhoneWindow->DecorView->创建相应的View或ViewGroup。创建完成后就可以让大家欣赏了,调用WindowManager把界面显示到屏幕上,然后创建ViewRoot,然后调用Wms提供的远程接口添加一个窗口并显示到屏幕上。

    5 接下来就是用户的操作,事件线程不断的把消息快递发到事件队列中去,然后事件分发线程秘书逐个取出消息,然后调用Wms中的相应函数处理该消息。

    8 Framework 的学习方法汇总

    可参考:https://blog.csdn.net/mybook1122/article/details/102805635

    先注意以下几点
    1 Android系统采用C/S架构;
    2 绝大部分IPC通信采用Binder通信;
    3 核心Service大多运行在System_server进程;
    4 核心Service代码大部分都在frameworks/base/services目录下;
    5 别一上来就看Binder!!!
    6 别一开始看源码就钻牛角尖!!!

    展开全文
  • 广大的Android应用开发者是不是对Android系统充满着好奇,是不是很想学习Android系统开发,可惜自己学习难度又太大,本课程将手把手教你学Android Framework开发,带你走进Android系统开发的殿堂,全课程以实战为主...
  • framework是什么

    千次阅读 2019-07-25 03:14:14
    framework是什么:FrameWork即架构,提供了软件开发的框架,使开发更具工程性、简便性和稳定性,framework是什么。下面是宜春门户站小编就framework是什么而整理的详细资料,fortran语言 intel fortran - 博客园。...

      framework是什么:FrameWork即架构,提供了软件开发的框架,使开发更具工程性、简便性和稳定性,framework是什么。下面是宜春门户站小编就framework是什么而整理的详细资料,fortran语言 intel fortran - 博客园。希望小编辛苦整理的资料能够帮到各位网友。觉得有帮助的话就点下面的百度分享按钮分享给自己周围的朋友圈吧。

      framework是什么

      FrameWork即架构,提供了软件开发的框架,使开发更具工程性、简便性和稳定性。

      它是一个语言开发软件

      Microsoft®.NETFramework1.1版可再发行组件包.

      NETFramework通过COMInterop(COM互操作)技术支持COM+和MTS。一个传统的COM应用程序能够调用一个.NET组件,同时.NET组件(在.NET中称为.NETAssembly)也能够调用一个COM组件。这一非常强大的双向互操作特性使你可以在应用程序中混合使用两类技术。

      framework是什么软件NETFramework是微软的几个开发团队一起努力发展的,最主要用来产生一个可以用来快速开发、部署网站服务及应用程序的开发平台。这个架构是两个项目的结果:第一个项目的目的是用来改善Windows作业平台上的程序开发,特别是改善COM(ComponentObjectModel3. balna267visualfoxpro(0),组件对象模块。一种微软所制定的软件技术;让对象的功能可以被其它软件所叫用,可以让组件重复使用、容易更新及);第二个项目则是制作一个以发展服务(Service)软件为目标的开发平台。这两个项目团队三年多前就已经在一起工作,他们希望可以发展出一种可以快速开发出以因特网为基础,而且易学易用的开发平台。

      目前的安全问题

      在今天的软件中,应用程序的来源很多,它们执行很多任务。对应用程序代码的信任是一个主要需求,因为我们谁也不想软件或信息遭到。给予许可的安全策略不会允许对信息的不适当的访问,或将本地机器给恶意的程序或甚至是有平常错误的代码。

      过去,安全结构提供了基于用户帐号的隔离和访问控制--在这些内给予代码完全访问权,并假定由特定用户可运行的代码具有相同的信任度。不幸的是,如果所有程序都代表某用户运行,根据用户对代码的隔离对于一个程序不被其它用户使用是不够的。另一种情况,不能被完全信任的代码经常被转移到沙箱模型中执行,在此代码运行于隔离,而不会访问大部分的服务。

      对今天应用程序的成功的安全解决方案必须能强化两个安全模型间的平衡。它必须提供对资源的访问,以便以完成有用的工作,它需要对应用程序的安全性作细

      下一页

    转载于:https://www.cnblogs.com/zhangli42/archive/2012/04/14/2446672.html

    展开全文
  • 已安装Net framework还Initialization Error
  • .NET Framework 4.8发布

    千次阅读 2019-04-20 15:13:00
    原文地址:...我们很高兴地宣布今天发布.NET Framework 4.8。它包含在Windows 10 2019 May更新中。.NET Framework 4.8也可以在Windows 7+和Windows Ser...
  • .NET Framework 与 .NET Core 的区别与联系

    千次阅读 2018-12-18 23:06:49
    ....   从上面图中我们可以看到.net 主要分为三个部分 .net FrameWork,.net Core ,Xamarin XAMARIN 主要用来构建... The .NET Framework 这个是我们现在经常用的,用这个可以创建windows应用程序还有web applicat...
  • net framework 4.0

    2018-11-22 11:27:53
    net framework 4.0
  • .NET Framework 4.5 降级至.NET Framework 4.0

    千次阅读 2019-06-01 16:14:50
    由于虚拟主机版本只有.NET Framework 4.0 所以遇到需要降级版本,降级版本都是心酸泪,网上这方面的资料也很少,所以总结一下经验分享: 我的项目是ASP.Net MVC , 本人VS2015 第一步VS打开项目:右键你的项目=>...
  • 1 异常描述 在从 SVN 检出项目并配置完成后,启动 Tomcat 服务器,报出... org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘XXX’ 此异常,为:注入 bean 失...
  • 2017年04月17日 21:01:57阅读数:1750411 异常描述在从 SVN 检出项目并配置完成后,启动 Tomcat 服务器,报出如下错误:2 异常原因通过观察上图中被标记出来的异常信息,咱们可以知道org.springframework.beans....
  • .net core 和 .net framework之间的关系

    千次阅读 2018-12-21 16:34:00
    .net core 和.net framework 是.net standard 在不同平台下的具体实现。   .net core的api种类 从.net framework 去除了以下内容 1. 和GUI相关的WForm和WPF, 它们绑定了windows 系统 2.Asp.Net WebForms 和...
  • Win10上安装任意版本的.net framework

    万次阅读 热门讨论 2017-11-08 19:01:13
    Win10系统自带的.net framework版本为4.7,当你下载了.net framework独立安装包想安装低于4.7版本的时候系统会提示已经安装了更高版本的.net framework,无法进行安装。然而,开发中或许需要低于4.7的版本。不过,在...
  • Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private cn.itcast.crm.service.BaseDictService ...
  • 安装包:dotNetFx40_Full_x86_x64.exe(.Net framework 4.0) 出现的问题:在win7 上安装dotNetFx40_Full_x86_x64.exe之后,弹出说明框:.Net framework 4安装未成功,原因是hresult 0x80240037 后面也采用了各种...
  • Robot Framework 介绍

    千次阅读 2017-08-10 17:44:36
    本文的主要目的是简要地介绍Robot Framework功能和特性,更加详细的内容,请移步至官网http://robotframework.org/ (官网的内容最为全面详细,由英文编写)。 本文分为下列小节作为讲解, 1. Robot Framework的...
  • org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'blogServiceImpl': Unsatisfied dependency expressed through field 'blogDAO'; nested exception is org.spr
  • .Net Micro Framework 快速入门

    万次阅读 热门讨论 2010-03-02 23:27:00
    一、简介 Microsoft .NET Micro Framework 2001年由微软研究院开始研发,并随后在其MSN Direct项目中使用该技术,2007年9月微软对外发布2.0,2008年10月 V3.0、2009年11月 V4.0、2010年5月 V4.1 beta,2009年并入...
  • 安卓framework开发的初理解

    万次阅读 多人点赞 2018-02-28 17:14:55
    小米公司最近正在招安卓framwork层的开发,有兴趣的朋友们抓住机会试试呀!传送门:安卓招聘 。不说了,我要开始恶补功课...Android Framework中的Application Framework层介绍 Android Framework架构原理学习之And...

空空如也

1 2 3 4 5 ... 20
收藏数 1,577,226
精华内容 630,890
关键字:

framework