熟悉Android 四大组件相关framework代码

Android FrameWork层框架的认识

收集了比较好的文章
饮水思源为名
wangchuan886

Android Framework原理

willin

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接口中的方法,往往用于做一些清理性地工作

你可能感兴趣的:(熟悉Android 四大组件相关framework代码)