Android FrameWork层框架的认识
收集了比较好的文章
饮水思源为名
wangchuan886
Android Framework原理
FrameWork关键字
Activity Manager:用来管理应用程序生命周期并提供常用的导航回退功能。 Window Manager:提供一些我们访问手机屏幕的方法。屏幕的透明度、亮度、背景。 Content Providers:使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。 View System:可以用来构建应用程序, 它包括列表(Lists),网格(Grids),文本框(Text boxes),按钮(Buttons), 甚至可嵌入的web浏览器。 Notification Manager:使得应用程序可以在状态栏中显示自定义的提示信息。 Package Manager:提供对系统的安装包的访问。包括安装、卸载应用,查询permission相关信息,查询Application相关信息等。 Telephony Manager:主要提供了一系列用于访问与手机通讯相关的状态和信息的方法,查询电信网络状态信息,sim卡的信息等。 Resource Manager:提供非代码资源的访问,如本地字符串,图形,和布局文件(Layout files )。 Location Manager:提供设备的地址位置的获取方式。很显然,GPS导航肯定能用到位置服务。 XMPP:可扩展通讯和表示协议。前身为Jabber,提供即时通信服务。例如推送功能,Google Talk。
FrameWork原理关键字
system_server进程 Zygote进程 attachApplication请求 scheduleLaunchActivity请求
Handler机制与底层实现原理
概念 Message - Message代表一个行为what或者一串动作Runnable, 每一个消息在加入消息队列时, 都有明确的目标Handler ThreadLocal - 线程本地存储区(Thread Local Storage,简称为TLS), 每个线程都有自己的私有的本地存储区域,不同线程之间彼此不能访问对方的TLS区域。 ThreadLocal的作用是提供线程内的局部变量TLS,这种变量在线程的生命周期内起作用, 每一个线程有他自己所属的值(线程隔离)MessageQueue (C层与Java层都有实现) - 以队列的形式对外提供插入和删除的工作, 其内部结构是以双向链表的形式存储消息的 Looper (C层与Java层都有实现) - Looper是循环的意思,它负责从消息队列中循环的取出消息然后把消息交给Handler处理 Handler - 消息的真正处理者, 具备获取消息、发送消息、处理消息、移除消息等功能
Handler是如何完成跨线程通信的
Android中采用的是Linux中的管道通信 关于管道,简单来说,管道就是一个文件 在管道的两端,分别是两个打开文件文件描述符,这两个打开文件描述符都是对应同一个文件,其中一个是用来读的,别一个是用来写的 消息队列创建时,会调用JNI函数,初始化NativeMessageQueue对象 , NativeMessageQueue则会初始化Looper对象 Looper的作用就是,当Java层的消息队列中没有消息时,就使Android应用程序主线程进入等待状态,而当Java层的消息队列中来了新的消息后,就唤醒Android应用程序的主线程来处理这个消息
整个消息机制流程
Handler通过sendMessage()发送Message到MessageQueue队列 Looper通过loop(),不断提取出达到触发条件的Message,并将Message交给target来处理 经过dispatchMessage()后,交回给Handler的handleMessage()来进行相应地处理 将Message加入MessageQueue时,处往管道写入字符,可以会唤醒loop线程;如果MessageQueue中没有Message,并处于Idle状态,则会执行IdelHandler接口中的方法,往往用于做一些清理性地工作