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) 方法;
Android中Activity的工作过程(三)_第1张图片
看注释43,它调用了 ActivityThread 的 performResumeActivity(IBinder token,boolean clearHide, String reason) 方法;
Android中Activity的工作过程(三)_第2张图片
看注释45,r.activity 是一个 Activity 类型的对象,这里调用了 Activity 的 performResume 方法;
Android中Activity的工作过程(三)_第3张图片
看注释46,这里调用了 Activity 的 performRestart 方法;
Android中Activity的工作过程(三)_第4张图片
看注释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 方法;
Android中Activity的工作过程(三)_第5张图片
看注释50的代码,这里的 am 是 ActivityManagerService 类型的对象,这里就会调用到 ActivityManagerService 的 activityIdle(IBinder token, Configuration config, boolean stopProfiling) 方法;
Android中Activity的工作过程(三)_第6张图片
看注释51处的代码,mStackSupervisor 是 ActivityStackSupervisor 类型的对象,这里就调用了 ActivityStackSupervisor 的 activityIdleInternalLoc-ked(final IBinder token, boolean fromTimeout,boolean processPausin-gActivities, Configuration config) 方法;看注释52,stack 是 ActivityStack 类型的对象,这里就会调用到 ActivityStack 的 stopActivityLocked(ActivityRecord r) 方法;
Android中Activity的工作过程(三)_第7张图片
看注释53的代码,r.app.thread 本质上就是 ActivityThread 的内部类 ApplicationThread 对象,所以就会调用到 ApplicationThread 的 scheduleStopActivity(IBinder token, boolean showWindow,int configChanges) 方法;
Android中Activity的工作过程(三)_第8张图片
看注释54的代码,这里就会插入一条消息给 ActivityThread 的内部类 H 处理,最终由 H 的 what = H.STOP_ACTIVITY_HIDE 的处理;
Android中Activity的工作过程(三)_第9张图片
看注释55,这里就调用到了 ActivityThread 的 handleStopActivity(IBinder token, boolean show, int configChanges, int seq) 方法;
Android中Activity的工作过程(三)_第10张图片
看注释56,这里就调用了 ActivityThread 的 performStopActivityInner(ActivityClientRecord r,StopInfo info, boolean keepShown, boolean saveState, String reason) 方法;
Android中Activity的工作过程(三)_第11张图片
看注释57,这里的 r.activity 就是 Activity 类型的对象,这里又调用了 Activity 的 performStop(boolean preserveWindow) 方法;
Android中Activity的工作过程(三)_第12张图片

你可能感兴趣的:(Android中Activity的工作过程(三))