startactivity 的具体实现流程

一。解析清单文件并加载

    app 启动 packagemanagerService 监控system/framwork 、 system/app 、 data/data 、 data/app_private 这些文件,读取mainfest 信息,并建立信息库存储在系统级别共享内存中;

    packagemanageService 会建立底层 userids 和groupids 同上层permissions 之间的映射,就会给一些底层用户分配权限,

    packagemanageService 解析每个apk 的信息到packages.xml 和packages.list 文件中,在package.list 中记录来了 pkgname userid debugflag datapath,下次开机直接读取 package.xml 和package.list

    launcher 就将packagemanagerService 已经解析好的数据都加载到内存,从内存中去读并展示到手机 ,配置了launcher 就可点击了

二。activity 的启动

    1.activity 是通过startactivity 启动的,由context 调用,其具体的实现类是 contextimpl .在contextimpl 中的startactivity() 会调用activityThread的相关方法, mMainThread.getInstrumentation().execStartActivity() --> activityManagerNative.getDefault.startActivity 放到底层处理,ActivityManagerNative是抽象类,getDefault() 方法返回的是IActivityManager,也仅仅是一个接口而已;其实这个抽象类使用了代理

class ActivityManagerProxy implements IActivityManager;
最终 调用
mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);
从代码发现了mRemote是一个IBinder,调用了IBinder的transact()方法
IApplicationThread执行了启动activity,那么谁实现了该接口呢?当然是ApplicationThread,这个类是ActivityThread的内部类。
  scheduleLaunchActivity 我们看到最后的sendMessage,往下走我们找到H类的处理消息方法 ,最后发现performLaunchActivity
最后的逻辑都在这里,通过我们的intent数据,结合classLoader找到了相关的类并且加载进来了。

2 activityMonitor 监控activity

    当创建的时候,会给zctivity 配置一个activityMonitor ,监控activity 的生命周期:

在instumentation 的execstartactivity () 上来先判断activityMonitor ==null ,在第一次开启activity 的时候,activityMonitor =null; 就会调用 activityManagerNative.getdefault().startActivity();调用JNI 创建,同时也创建了activityMontor,在其中就有activity 的生命周期的监控


  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值