PS:本文为转载文章,原文可读性会更好,文末有原文链接本文为基于Android中Activity的工作流程(二)本文继续写,Android中Activity的工作流程(二)在这篇文章中,我们分析了MainActivity的onCreate和onStart方法的调用过程(这里指的是MainActivity)在源代码中如下代码;本文分析源码中MainActivity的onResume和Main2Activity的onStop方法的调用过程。在Android中Activity的工作过程一文(二)中,我们分析了如下几行代码;见注释34,它调用handleResumeActivity(IBindertoken,booleanclearHide,booleanisForward,booleanreallyResume,intseq,Stringreason)方法;见注释43,它调用了ActivityThread的performResumeActivity(IBindertoken,booleanclearHide,Stringreason)方法;见注释45,r.activity是Activity类型的对象,这里调用了Activity的performResume方法;见注释46,这里调用了Activity的performRestart方法;见注48,这里的mInstrumentation是一个Instrumentation类型的对象,这里调用了Instrumentation的callActivityOnRestart(Activityactivity)方法;如果你看到了,这里调用了Activity的onRestart方法,如下两行代码;//49、Intentintent=newIntent(this,Main2Activity.class);启动活动(意图);显然是回调了Main2Activity的onRestart方法;好吧,我们再回顾一下注释47的代码,mInstrumentation是Instrumentation类型的对象,这里调用了Instrumentation的callActivityOnResume(Activityactivity)方法;看到没有注解50,这里调用了Activity的onResume方法,然后我们看注解49的代码,所以注解50的代码其实就是调用了Main2Activity的onResume方法。好吧,我们回过头来看注释44中的代码,最终会调用到Idler的queueIdle方法;看注释50的代码,其中am是ActivityManagerService类型的对象,activityIdle(IBindertoken,Configurationconfig,booleanstopProfiling)方法;看注释51的代码,mStackSupervisor是ActivityStackSupervisor类型的对象,这里调用了ActivityStackSupervisor的activityIdleInternalLoc-ked(finalIBindertoken,booleanfromTimeout,booleanprocessPausin-gActivities,Configurationconfig)方法;看注释52.stack是ActivityStack类型的对象,这里会调用ActivityStack的stopActivityLocked(ActivityRecordr)方法;看注释53的代码,r.app.thread本质上是ActivityThread的内部类ApplicationThread对象,所以会调用到ApplicationThread的scheduleStopActivity(IBindertoken,booleanshowWindow,intconfigChanges)方法;看注释54的代码,这里会插入一条消息让ActivityThread的内部类H去处理,最后由H的what=H.STOP_ACTIVITY_HIDE处理;见注释55,这里调用了ActivityThread的handleStopActivity(IBindertoken,booleanshow,intconfigChanges,intseq)方法;见注释56,这里是performStopActivityInner(ActivityClienttRecordr,StopInfo信息,booleankeepShown,booleansaveState,Stringreason)方法;见注释57,其中r.activity是Activity类型的对象,这里调用了Activity的performStop(booleanpreserveWindow)方法;
