管理Activity生命周期

来源:互联网 发布:中英互译软件哪个好 编辑:程序博客网 时间:2024/04/30 12:24

一、关于生命周期中各种状态转换的回调方法调用


在整个Activity的生命周期中,系统按照类似阶梯金字塔(如下图)的顺序调用一套核心生命周期方法。Activity每一阶段的生命周期都是阶梯金字塔中单独的一步。当系统创建一个新的Activity实例时,阶梯金字塔左边的回调方法分别是Activity移向顶端各个步骤,阶梯金字塔的顶端就是Activity运行在设备前端,用户可以跟它互动的状态。

当用户开始离开Activity时,系统调用阶梯金字塔右边的回调方法使Activity状态退回到阶梯金字塔的下面,以此销毁Activity。在一些情况中,Activity将移动到阶梯金字塔右边的某个中间状态待机(比如用户切换到另一个APP),Activity能够重新回到阶梯金字塔顶端(如果用户返回这个Activity)并且回到用户离开之前的状态。

不必实现所有的生命周期方法,实现多少取决于你的Activity的复杂程度。无论如何理解每一个生命周期回调方法,并且通过实现特定的回调方法使你的APP能实现像你期望的表现都是很重要的。正确地实现你的Activity生命周期方法,确保你的APP有好的表现包括以下几点:

1、如果用户正在使用你的APP的时候接到一个电话或者切换到另一个APP,APP不能崩溃

2、在用户不再主动使用APP时,不要消耗宝贵的系统资源

3、如果用户离开你的APP并且在一段时间之后返回该APP,不要丢失用户的进度

4、屏幕在横屏和竖屏之间切换的时候,APP不能崩溃或者丢失用户的进度


Activity会在Created,Started,Resumed,Paused,Stopped和Destroyed这六个状态里转换。但是只有Resumed,Paused和Stopped这三个状态可以是静态的。

Resumed

Activity处于设备前台并且用户可以和它互动(也可以理解为“running”正在执行的状态)

Paused

Activity被另一个Activity挡住其中的一部分——在前台的另一个Activity是半透明的或者没有覆盖整个屏幕。Paused的Activity不接受用户输入并且不执行任何代码
Stopped

Activity被完全隐藏掉,用户看不到该Activity。即Activity处于后台中。在Stopped的状态中,Activity实例和他的所有像成员变量这样的状态信息会被保存,但是它不能执行任何代码。

其他的状态 (Created和Started)都是短暂的,系统会快速地通过调用生命周期回调方法转换到他们的下一个状态。在系统调用onCreate()之后,系统会马上调用onStart(),紧跟着调用onResume()


二、指定APP的Launcher Activity(APP入口)

在用户在Home界面选择APP图标后,系统会调用该APP被定义为“launcher”或者“main”Activity的onCreate()方法。这就是作为APP的用户界面主入口的Activity

你可以在manifest文件中定义哪个Activity作为主Activity。AndroidManifest.xml是项目目录的根(root)。

APP的主Activity必须在manifest的<intent-filter>标签中声明MAIN action和LAUNCHER category,例如:
<activity android:name=".MainActivity" android:label="@string/app_name">    <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />    </intent-filter></activity>
如果MAIN action或者LAUNCHER category没在APP中的任一个Activity中声明,那APP图标将不会出现在Home界面的APP列表中




0 0