《Android开发艺术探索第九章读书笔记》-四大组件原理

四大组件的运行状态

  1. Activity是一种展示型组件,用于向用户直接地展示一个界面,并且可以接受用户的输入信息从而进行交互。
  2. Service是一种计算型组件,用于在后台执行一系列计算任务。由于Service组件工作在后台,因此用户无法直接感知到它的存在。
  3. BroadcastReceiver是一种消息型组件,用于在不同的组件乃至不同的应用之间传递消息。BroadcastReceiver同样无法被用户直接感知,因为他工作在系统内部。
  4. ContentProvider是一种数据共享型组件,用于向其他组件乃至其他应用共享数据。ContentProvider内部的Insert、insert、delete、update和query方法需要处理好线程同步,因为这几个方法是在Binder线程池中调用的。

Activity


  1. Activityl流程
  2. startActivity不管 多少种重载方式,最总还是会调用startActivityForResult方法
  3. ApplicationThread是ActivityThread的一个内部类,(IApplicatonThread这个BInder接口实现了大量和Activity以及Service启动/停止相关的功能),它是继承了ApplicationThreadNative,e而ApplicationThreadNative继承了binder并实现了IAplicationThread接口。ApplicationThreadNative的作用和系统为AIDL文件生成的类是一样的。
  4. 启动Activity实现是由ActivityManagerNative.getDefault()的startActivity方法来完成的。而ActivityManagerService继承自ActivitNative,又因为ActivityManagerNative继承自Binder并实现了IActivityManger这个Binder接口,所以AMS是一个Binder,它是IActivityManager的具体实现
  5. Activity和Application对象的创建都是通过Instrumenttion来完成的,是通过类加载器实现的。
  6. ContextImpl是Context的具体实现,是通过Activity的attach方法来和Activity建立关联。

Service

  1. Service分为两种工作状态,一种是启动状态,主要用于执行后台计算;另一种是绑定状态,主要用于其他组件和Service的交互

Service的启动过程


  1. Service的启动过程
  2. 最终是由于ApplicationThread继承了ApplicationThreadNative.因此只需要看ApplicationThread对Service启动过程的处理,对应着scheduleCreateService方法。
  3. 之后发送消息给Hnadele H实现服务的最总启动。

Service的绑定过程

service的绑定过程
- 服务的绑定可能是跨进程的,故因此要把ServiceConnection转化为ServiceDispatcher.InnerConnection对象,而ServiceDispatcher的内部内InnerConnection刚好充当BInder的角色。

BroadcastReceiver的工作过程

广播的注册过程

  • 静态注册的广播在应用安装时有系统自动完成注册,具体来说是由PMS来完成整个注册过程的,除了广播以外,其他三大组件也都是在应用安装时有PMS解析并注册。
  • 动态注册是从ContextWrapper的registerReceiver方法来完成的。
    注册过程

广播发送和接收过程

  • 默认情况改下广播不会发送给已经停止的应用。在Android3.1开始种就为Intent添加了两个标记位,分别是FLAG_INCLUDE_STOPPED_PACKAGESFLAG_EXCLUDE_STOPPED_PACKAGES,用来控制广播是否要对处于停止状态的应用其作用。

发送过程

ContentProvider的工作过程

ContentProvider

  1. ContentProvider的启动过程:启动一个应用时,会进入到main方法,在方法中会创建ActivityThread的示例并创建主席纳称的消息队列。之后会通过ActivityThread的attach方法远程调用AMS的attachApplication,并将ApplicationThread对象提供给AMS。然后会调用Aoolication中的bindApplication方法,实现跨进程见的传输,最后在handleBindApplication中处理并加载ContentProvider

  2. ContentProvider一般都是单实例,是由android:multiprocess属性决定

  3. ContentProvider创建过程可分为:

    • 创建ContextImpl和Instrumentation
    • 创建Application对象
    • 启动当前线程的ContentProvider并调用其onCreate方法
    • 调用Application的onCreate方法
  4. handleBindApplication方法会创建Application对象并加载ContentProvider,注意是先加载ContentProvider,然后调用Application的onCreate方法。

参考:
Android开发艺术探索读书笔记(三)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值