android_activity传递消息



  android分为四层:应用程序层(Applications)、应用程序框架层(Application Framework)、系统运行库层(Libraries和Android Runtime)和Linux内核层(Linux Kernel)。
  Framework框架包含三个主要部分:客户端,服务端,Linux驱动。服务端主要包含两个重要类:WindowManagerService(WmS)和ActivityManagerService;还包含两个重要的消息处理类(KeyQ类,读取用户UI操作消息,比如按键/触摸屏/trackball/鼠标等;InputDispatcher类,从QueueEvent中读取用户消息,并进行过滤,过滤后将消息发送给当前活动的客户端)。
  APK程序中有至少含有三个线程:两个binder对象对应两个线程(ViewRoot.W对象和Application对象,都继承与binder,用于接收linux Binder驱动发送的IPC调用),主线程。
  UI线程是从ActivityThread运行的,在该类的main方法中。
  传递消息一般指多个线程之间,而Activity本身不是线程。ActivityThread才是线程。
  普通类的实例化都是程序员显示完成的,而Activity的实例化却是由framework完成的,程序员只能使用startActivity方法告诉framework去运行哪个Activity,程序员得不到Activity对象的引用。可借助Activity.getApplication函数,获取Application对象,程序中唯一,该对象的名称可以在AndroidMenifest中指定。还可以通过Intent,SharePreference/文件/数据库。
  窗口:程序员所看到的屏幕上的某个独立的界面,比如Activity界面,一个对话框,一个Menu菜单。从WmS角度讲,窗口是接收用户消息的最小单元;给WmS添加一个窗口调用WindowManager类的addView方法,即添加一个View对象。
  ViewRoot类:客户端申请创建窗口时需要一个客户端代理,用以和WmS进行交互。WmS所管理的每一个窗口都会对应一个ViewRoot类。
  W类:ViewRoot的内部类,继承于Binder,用于向WmS提供一个IPC接口,从而让WmS控制窗口客户端的行为。
  一个Activity就是一个场景(Context),一个Service也对应一个场景。Context.getResources方法回去的是同一个全局对象。
  Context个数=Service个数+Activity个数+1;
  Context类本身是一个纯abstract类;ContextWrapper一个包装而已,构造函数中必须包含一个真正的Context引用。ContextThemeWrapper包含了与主题Theme相关的接口,主题指的是AndroidManifest中通过android:theme为Applicaiton的元素或者Activity的元素指定的主题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值