Android 开发艺术探索笔记(18)

1. Activity的工作过程
我们从startActiviity方法开始分析,startActivity有好几种重载方式,但最终都会调用startActivityForResult方法,它的实现如下:
这里写图片描述
在mParent == null中,mParent代表的是ActivityGroup。ActivityGroup最开始被用来在一个界面中嵌入多个子Activity,但是其在API13就被丢弃了,系统采用Fragment来代替ActivityGroup。
mMainThread.getAppliactionThread()它的类型是ApplicationThread,ApplicationThread是ActivityThread的一个内部类,通过后面的分析可以发现这两个Thread都发挥着重要的作用。下面是execStartActivity的代码:
这里写图片描述
这里写图片描述
在try中有个ActivityManagerNativt.getDefault,就是通过它的startActivty方法完成,而它是继承自Binder并实现了IActivityManager,因此它的具体实现是ActivityManagerService,在AMN中,AMS这个binder对象采用单例模式对外提供,Singleton是一个单例的封装类,第一次调用它的get方法时,它会通过create方法来初始化AMS这个Binder对象,在后续的调用中直接返回之前创建的对象。里面还有一个checkStartActivitiyResult是检查启动Activity的结果。接着看AMS的startActivity。
这里写图片描述
这里写图片描述
这段代码就是一长串的调用,从AMS一直调用到ActivityStack,最后在ActivityStackSupervisor和ActivityStack之间传递。
这里写图片描述

performLaunchActivity方法最终完成了Activity对象的创建和启动过程,它主要完成了以下事情:
(1)从ActivityRecord中获取待启动Activity的组件信息。
(2)通过Instrumentaion的newActivity方法使用类加载器创建Activity对象。
(3)通过LoadedApk的makeAppliaction方法来尝试创建Application对象
(4)通过ContextImpl对象并通过Activity的attach方法来完成一些重要数据的初始化。

2. Service的工作过程
主要了解Service的启动过程和绑定过程。Service有两种状态,一种是启动状态,一种是绑定状态。这两种状态是可以共存的。通过Context的startService可以启动一个服务。
这里写图片描述
通过Context的bindService可以绑定一个服务。
这里写图片描述

Service的启动过程:
Service的启动过程是从ContextWrapper的startService开始的。
这里写图片描述
上面的mBase的类型是ContextImpl。从ContextWrapper,大部分的功能都是由mBase来完成。下面是ContextImpl的startService:
这里写图片描述
里面调用了startServiceCommon方法,里面有AMN.getDefault来启动一个服务,接着又在它的实现AMS中去startService,AMS会通过调用mServices这个对象来完成Service后续的启动过程,mService对象的类型是ActivityServices,ActivityServices是一个辅助AMS进行Service管理的类,包括Service的启动,绑定和停止服务。后面的步骤就和Activity差不多了,也是通过handlerCreateService完成一系列Service的创建实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值