关于java:Android中Activity的工作过程三

9次阅读

共计 2144 个字符,预计需要花费 6 分钟才能阅读完成。

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) 办法;

正文完
 0