Activity


生命周期

典型情况下的生命周期分析

典型情况是指在用户参与的情况下,Activity所经过的正常流程的生命周期。通常包括以下流程:

  1. onCreate: 表示Activity正在被创建,这是生命周期的第一个方法。我们可以在这个过程中做一些初始化工作,比如调用setContentView去加载界面布局资源,初始化Activity所需数据
  2. onRestart: 表示Activity正在被重新启动,一般情况下,当Activity由不可见状态重新变为可见状态时,onRestart就会调用。这种情况一般是用户行为导致的。
  3. onStart: 表示Activity正在被启动,即将开始,这时候Activity已经可见了,但是还没出现在前台,同时无法和用户交互。
  4. onResume: 表示Activity已经可见了,并且出现在前台开始活动。
  5. onPause:表示Activity正在停止,正常情况下紧接着就会调用onStop。在特殊情况下,当用户返回该Activity时,onResume则会被调用。
  6. onStop: 表示Activity即将停止,可以做一些稍微重量级的回收工作。
  7. onDestroy: 表示Activity即将被销毁,这是Activity生命周期的最后一个回调,可以做一些资源回收的工作。
    activitylife.png

配对关系

  1. onCreate && onDestroy 分别代表着Activity的创建和销毁,并且有且仅有一次调用
  2. onStart && onStop 当用户将屏幕进行点亮或者熄灭的时候可能会调用多次,代表Activity是否可见
  3. onResume && onPause 代表Activity是否在前台

Activity启动过程

涉及Instrumentation, ActivityThread和ActivityManagerService(简称AMS)。
启动Activity的请求由Instrumentation处理,它通过Binder向AMS发送请求,AMS内部有一个ActivityStack负责栈内的Activity的状态的同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用。
其中ActivityStack的resumeTopActivityInnerLocked方法首先通过topRunningActivity方法获取到栈最顶部且没有销毁和可聚焦的。


resumeTopActivityInnerLocked-1.png

然后判断栈里面是否有Activity保留以及该Activity是否是处于resumed的状态的,如果是则什么都不做。
接下来判断是否正在pause一个Activity,已经是否处于休眠状态,以及持有这个Activity的user启动了,然后判断了一次这个Activity是否在mStackSupervisor.mStoppingActivities里面(代表正在准备stop),需要从其中删除掉这个Activity,然后很神奇地又判断了一次是否在pause一个Activity,可能这两次判断之间有耗时操作吧。


resumeTopActivityInnerLocked-2.png

这段代码开头的逻辑是如果有其他的Activity需要显示到前台,那么需要栈顶的Activity去先执行onPause,然后启动栈顶的Activity的process去尽早的让当前Activity执行onPause,然后return 掉。
resumeTopActivityInnerLocked-3.png

然后做一些启动新的Activity的工作,
resumeTopActivityInnerLocked-3.png

resumeTopActivityInnerLocked-4.png

resumeTopActivityInnerLocked-5.png

到这里就完成了栈顶Activity调用onResume的过程

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容