Android中Activity的工作过程(三)

PS:本文系转载文章,阅读原文可读性会更好,文章末尾有原文链接

本文是基于Android中Activity的工作过程(二)这篇文章继续来写的,在Android中Activity的工作过程(二)这篇文章中,我们在如下代码;
图片
分析了 MainActivity(这里的 this 是指 MainActivity) 的 onCreate 和 onStart 方法在源码中的调用流程;本篇文章分析 MainActivity 的 onResume 和 Main2Activity 的 onStop 方法在源码中的调用流程。在Android中Activity的工作过程(二)这篇文章中,我们分析到如下几行代码;
图片
看注释34,它是调用了 ActivityThread 的 handleResumeActivity(IBinder token,boolean clearHide, boolean isForward, boolean reallyResume, int seq, String reason) 方法;
图片
看注释43,它调用了 ActivityThread 的 performResumeActivity(IBinder token,boolean clearHide, String reason) 方法;
图片
看注释45,r.activity 是一个 Activity 类型的对象,这里调用了 Activity 的 performResume 方法;
图片
看注释46,这里调用了 Activity 的 performRestart 方法;
图片
看注释48,这里的 mInstrumentation 是 Instrumentation 类型的对象,这里调用了 Instrumentation 的 callActivityOnRestart(Activity activity) 方法;看到了没有,这里调用了 Activity 的 onRestart 方法,在下面这两行代码中;//49、Intent intent = new Intent(this,Main2Activity.class); startActivity(intent);显然是回调了 Main2Activity 的 onRestart 方法;好,我们看回注释47的代码,mInstrumentation 是 Instrumentation 类型的对象,这里就调用了 Instrumentation 的 callActivityOnResume(Activity activity) 方法;看到注释50没有,这里调用了 Activity 的 onResume 方法了,然后我们再看一下注释49的代码,所以说注释50的代码其实是调用 Main2Activity 的 onResume 方法。好了,我们再回头看注释44的代码,这里最终会调用到 Idler 的 queueIdle 方法;
图片
看注释50的代码,这里的 am 是 ActivityManagerService 类型的对象,这里就会调用到 ActivityManagerService 的 activityIdle(IBinder token, Configuration config, boolean stopProfiling) 方法;
图片
看注释51处的代码,mStackSupervisor 是 ActivityStackSupervisor 类型的对象,这里就调用了 ActivityStackSupervisor 的 activityIdleInternalLoc-ked(final IBinder token, boolean fromTimeout,boolean processPausin-gActivities, Configuration config) 方法;看注释52,stack 是 ActivityStack 类型的对象,这里就会调用到 ActivityStack 的 stopActivityLocked(ActivityRecord r) 方法;
图片
看注释53的代码,r.app.thread 本质上就是 ActivityThread 的内部类 ApplicationThread 对象,所以就会调用到 ApplicationThread 的 scheduleStopActivity(IBinder token, boolean showWindow,int configChanges) 方法;
图片
看注释54的代码,这里就会插入一条消息给 ActivityThread 的内部类 H 处理,最终由 H 的 what = H.STOP_ACTIVITY_HIDE 的处理;
图片
看注释55,这里就调用到了 ActivityThread 的 handleStopActivity(IBinder token, boolean show, int configChanges, int seq) 方法;
图片
看注释56,这里就调用了 ActivityThread 的 performStopActivityInner(ActivityClientRecord r,StopInfo info, boolean keepShown, boolean saveState, String reason) 方法;
图片
看注释57,这里的 r.activity 就是 Activity 类型的对象,这里又调用了 Activity 的 performStop(boolean preserveWindow) 方法;
图片

活到老,学到老。

4 声望
3 粉丝
0 条评论
推荐阅读
Java12的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft63阅读 12.7k

Java8的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft32阅读 27.4k评论 1

一文彻底搞懂加密、数字签名和数字证书!
微信搜索🔍「编程指北」,关注这个写干货的程序员,回复「资源」,即可获取后台开发学习路线和书籍来源:个人CS学习网站:[链接]前言这本是 2020 年一个平平无奇的周末,小北在家里刷着 B 站,看着喜欢的 up 主视...

编程指北71阅读 33.4k评论 20

Java11的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft28阅读 19.2k评论 3

Java5的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft13阅读 21.7k

Java9的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft20阅读 15.3k

Java13的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft17阅读 11.1k

活到老,学到老。

4 声望
3 粉丝
宣传栏