为了账号安全,请及时绑定邮箱和手机立即绑定

debug方式看Activity启动流程小记

标签:
Android

Activity启动流程虽然很多博客讲了很多次了,但是这一次是自己的亲身体会

1.前言

debug需要gradle里面编译版本和官方模拟器api版本一致(这里源码是api25)

2.准备材料

1.app里面一份稀松平常的跳转activity代码

Intent intent = new Intent();
            intent.setClass(MainActivity.this,Main2Activity.class);
            startActivity(intent);

2.官方模拟器一份

3. 断点列表

TIM图片20170904235322.png

4.从startActivity(intent);开始debug吧!

attach上2个进程左边是app进程(8626),右边是系统进程(8600)

TIM图片20170905001044.png

TIM图片20170905001205.png

接下来就是旅途开始的地方了

TIM图片20170905001331.png

从 onClick开始 调用 startActivity,实际上是调用了 Activity类的startActivityForResult 方法,接着调用了 ActivityManagerNative 中内部类的 ActivityManagerProxy 的 startActivity。<br>
核心就是 断点这句 mRemote.transact(START_ACTIVITY_TRANSACTION, data, reply, 0);

TIM图片20170905001519.png
看看这个transact方法是个什么鬼,居然调用了jni 的native方法
TIM图片20170905001558.png

c++层不细说,毕竟不能暴露自己c++弱鸡的本质,但是可以教大家一个看通过native方法名查询对应c++源码的方法如下图:

TIM图片20170905001801.png

接下来不要留恋c++层了 我继续走断点了

TIM图片20170905001847.png

这里 看到 最底层的 Binder execTransact方法的注释

TIM图片20170905001929.png

看这句注释,所有来自 binder.cpp的binder数据接收都会走到这里,发现了跨进程通信的秘诀了有木有(mRemote发完 execTransact收 )<br>
刚刚 我们app进程 AMN的 mRemote发过来的数据 是在系统进程AMN接收的

TIM图片20170905002223.png
系统进程里面接着往下走

TIM图片20170905002347.png
系统进程里面接着往下走

TIM图片20170905002414.png
如上图所示,又看见了熟悉的跨进程发消息的函数了,这次不是AMN发的,而是ApplicationThreadNative发的<br>

既然发系统进程发了东西,接下来app进程就该收到快递了

TIM图片20170905002541.png

TIM图片20170905002717.png

系统的ApplicationThreadNative发过来的消息,还是app的ApplicationThreadNative接受的,和上面 app进程AMN发的消息还是系统进程的AMN收一样(真的是,自己约的那啥,跪着也要打完啊)<br>
继续走
TIM图片20170905002750.png
发现最终是掉了ApplicationThreadNative子类 ApplicationThread的方法了呀,事后还发了一个信息,每错就是 ActivityThread.H类接收处理的

TIM图片20170905003245.png

好了基本流程就到这里了

5.做个小总结吧:

app的 AMP 发消息 给 系统进程的 AMN,系统进程的 AMN 用ApplicationThreadNative 发消息 给 app进程的 ApplicationThreadNative ,
app进程的 ApplicationThreadNative 负责发个msg 给 ActivityThread.H 的handleMsg方法处理。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 1
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消