[转载]Android学习之 Activity 生命周期(LifeCycle)

[转载]Android学习之 Activity 生命周期(LifeCycle) – 潺缘 – 博客园.

今天学习Activity LifeCycle.

Android,系统把Activities当做一个Activity Stack进行管理。当一个新的Activity被启动时,它将放在这个Activity Stack的最顶部,然后成为一个Running Activity. 而上一个Activity总是在这个Activity的下一层,且将不会再显示到前端直到一个新的Activity存在!

一个Activity本质上来说包括以下四个状态:

1. 当一个Activity在屏幕的前台(foreground)时(同时也在Activity Stack的顶部)时,这个Activity就处在active或running状态。

2. 当一个Activity失去了焦点,但是可见(例如:一个新的不是全屏的activity处于Activity Stack顶部)时,Activity处理Paused状态. 一个被Paused的Activity是完全可用的(alive)(这时的Activity将保存所有的状态与成员信息且仍处理Window manager 的attach范围), 这种状态下的Activity在系统极度缺少内存的情况下被系统杀掉!

3. 如果一个Activity完全被另一个Activity覆盖时,该Activity就处理Stoped状态。它将仍然保存所有状态与成员信息,但是,它对 用户已经不在可见,所以,它的窗口被隐藏了。当系统需要内存时,系统会经常杀掉这种状态的Activity。

4.当一个activity处理paused或stopped状态时,系统可以清除这个activity的内存而不调用这个activity的finish方法或者简单的结束它的进程,当它被再次显示给用户,它需要再次完全启动,并还原到最近的一状态。

下面所说的方法可以理解为Activity进入对应状态时会被调用的方法!

下面的一张图说明了Activity的状态变化路线图。长方形表示你可以覆盖这些方法,以便在Activity状态切换之间执行一定的动作。含有颜色的椭圆表示Activity可能经常处于的状态!

activity_lifecycle

下面是三个在你控制或监控(monitoring)Activity过程中比较重要的三个循环:

1. 全个生命期(The entire lifetime). 这个生命周期发生在第一调用onCreate(Bundle)方法到最终的对onDestroy()的调用。一个Acitivity可以在 onCreate()方法中对全局的状态进行初始化,在onDestroy中释放所有用到的资源。例如:如果需要一个后台运行的从网络中下载数据的线程, 那么可以在onCreate()函数中进行创建,在onDestroy()中停止。

2. 可视生命期(visible lifetime). 这个生命期从调用onStart()方法开始到调用onStop()函数结束。在该生命期中,用户可以在屏幕上看到这个activity,尽管他可能不在 前台,不能与用户进行交互,在这个生命期中,你可以维护那些你要显示给用户看的数据。例如:为了监控所有可以对你的UI产生影响的消息,你可以在 onStart()函数中注册一个BroadcastReceiver,然后当用户不能看到你所要显示的信息,在onStop()函数中反注册它。 onStart()与onStop()方法可以被调用多次。

3. 前台生命期(foreground lifetime).前台生命期从onResume()到onPause()。在这期间,这个activity在其他activity的前面,且正在与用 户进行交互。一个activity可以很频繁的在Resumed与Paused状态之间进行切换。例如当设备Sleep时、一个Activity result被传递时、一个新的Intent被传递时等。所以,运行在这期间的代码必须时快速轻量级的。

一个 activity的整个生命周期定义在下面的activity方法中。你可以覆盖这些方法,使得activity在不同状态之间执行一定的动作。所有的 activities都将实现onCreate(Bundle)方法去完成初始化设置工作,在实现这些方法的过程中,你需要经常调用这些方法的 superclass.

01 public class Activity extends ApplicationContext {
02 protected void onCreate(Bundle savedInstanceState);
03
04 protected void onStart();
05
06 protected void onRestart();
07
08 protected void onResume();
09
10 protected void onPause();
11
12 protected void onStop();
13
14 protected void onDestroy();
15 }

Most importantly, any changes made by the user should at this point be committed (usually to the ContentProvider holding the data).

重要一点:用户操作的变化都应该在这时进行保存!通常使用ContentProvider进行保存!

以上资料是我翻译自Android 3.0 Doc. 恳请高手指点!

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏