读书人

性命期

发布时间: 2012-09-06 10:37:01 作者: rapoo

生命期
LifeCycle
活的生命期

一 Activity 的生命期非常重要,因 Activity 被系回收掉。

生命期

作者在初章中一直努力地者: Android 平台的基本用程式,跟桌面用程式的度,者什不同。甚至因 Android 平台有免、跨平台的工具,使得 Android 平台用程式的更。

但是忘了,Android 平台也是手作系。撇掉其他功能不,手的特性,就是能在未完成目前作的候,正在使用的功能,切到接、接收模式...而且在接完回用程式,希望能看到一的容。

在使用者使用智慧型手,大多已使用多工(Multi-Task)的作系(如 Windows Mobile),可以在用手音的同,也行其他多程式。同行多程式有它的明好,但是也有它的重的缺。每多行一用程式,就多耗一些系。而手的是相有限的。同行的程式多,或是的程式有正放掉,行系就得越越慢,甚至不定。

了解, Android 引入了一新的制 -- 生命期 (Life Cycle)。
行程

用程式(一 Activity)行的行程(process)。在 Android 作系中,每用程式都是一行程。Android 系平台(的是 Dalvik )一唯一的 Activity 史堆,旁察每用程式行程。系平台依照系的, Activity 的使用,管理的使用。

Activity 除了行程式流程,操作介面元件之外,最重要的,就是它提供了者控制行程生命期的函式。我已相在 OnCreate (建立行程的行)函式中,加入我 Activity 行流程的控制。在前面遇到的例中,我不需要除了 OnCreate 之外的行做出改。不理解行程的生命期,我深入 Android 打下基。
什要了解生命期

Android 用程式的生命期是由 Android 框架行管理,而不是由用程式直接控制。

通常,每一用程式(入口一般是一 Activity 的 onCreate 方法),都一行程(Process)。系即不足的候,依照先自行行程(process)的回收。不管是使用者或者,都法定的用程式何被回收。

一 Activity 除了 OnCreate 函式之外,先定了 OnPause(停行程的行)、OnResume(行程的行)等等的基本行,一 Activity 切到另一 Activity 的候,原本的 Activity 一串的改。者可以在程式中添加一些各相的流程,每次 Activity 改,就行相的流程。

要使用者有好的使用,Activity 需要在各期上保管、恢、送料等工作。
Activity 的

Android 的(VM)是使用堆 (Stack based) 管理。主要有四:

* Active (活)
* Paused (停)
* Stopped (停止)
* Dead (已回收或未)

Active (活)

「Active」是使用者用程式或 Activity 後,Activity 行中的。

在 Android 平台上,同一刻只有一 Activity 於活(Active)或行(Running)。其他的 Activity 都於未(Dead)、停止(Stopped)、或是停(Pause)的。
Paused (停)

「Paused」是 Activity 暗下,退到背景面的。

我使用Toast、AlertDialog、或是了,都原本行的 Activity 退到背景面。新出的Toast、AlertDialog等介面元件住了原的 Activity 面。Activity 在「Paused」,使用者法原 Activity 互。
Stopped (停止)

「Stopped」是有其他 Activity 正在行,而 Activity 已幕,不再作的。

透按「Home」,可以叫出所有於「Stopped」的用程式列表。

在「Stopped」的 Activity,可以透「Notification」醒。「Notification」在後面章中解。
Dead (已回收或未)

「Dead」是 Activity 尚未被、已被手止,或已被系回收的。

要手止 Activity,可以在程式中呼叫「finish」函式。我在加入一章中已提到了。

如果是被系回收,可能是因不足了,所以系根不足的回收,於「Stopped」的 Activity 所用的回收。
不足的行

不足,Dalvik 根其回收回收:

1. 先回收其他 Activity 或 Service/Intent Receiver 的行程(即先回收立的Activity)
2. 再回收於「Stopped」的其他型 Activity(在背景等待的Activity)。最久有使用的 Activity 先回收(比官方的法是 "根 LRU 演算法...")
3. 不?回收 Service 行程
4. 快不行啦,掉可的 Activity/行程
5. 前的 Activity

系缺缺到始「4. 掉可的 Activity/行程」,大概我子的也早到啦!
察 Activity 作流程

了多的,我可以一些程式直查看 Activity 的作流程?

然可以。在上一章 (Log)中,我到的「Log」工具,正好可以在查看 Activity 的作流程派上用。

打「src/com/demo/android/bmi/Bmi.java」,在程式中加入一些「Log」:

public class Bmi extends Activity {
private static final String TAG = "Bmi";

public void onCreate()
{
super.onCreate(...);
Log.v(TAG,"onCreate");
}

public void onStart()
{
super.onStart();
Log.v(TAG,"onStart");
}

public void onResume()
{
super.onResume();
Log.v(TAG,"onResume");
}

public void onPause()
{
super.onPause();
Log.v(TAG,"onPause");
}

public void onStop()
{
super.onStop();
Log.v(TAG,"onStop");
}

public void onRestart()
{
super.onRestart();
Log.v(TAG,"onReStart");
}

public void onDestroy()
{
super.onDestroy();
Log.v(TAG,"onDestroy");
}

}



我 Activity 的各加入了「Log」息。模器行,我可以透 「LogCat」工具查看 Activity 所在的。

上面的七又可以成三:

1. 源分配 (Create/Destroy)

完整的 Activity 生命期由「Create」始,由「Destroy」束。 建立(Create)分配源,(Destroy)放源。

2. 可不可(Start/ReStart/Stop)

Activity 行到「Start」,就可以在幕上看到 Activity。相反地,Activity 行到「Stop」, Activity 就幕上消失。

使用者按下 Back 按回到上一 Activity ,先到 Restart ,再到一般的 Start 。

3. 使用者能否直接存取幕(Resume/Pause)

有 Toast、AlertDialog、、等息入,原的 Activity 入「Pause」,放直接存取幕的能力,被中到背景去,前景交先高的事件。些先高的事件理完後,Activity 就改入「Resume」,此又直接存取幕。
Activity 作流程

由行的看,我可以出所有 Android 用程式都遵循的作流程:
一般

onCreate -> onStart -> onResume

一 Activity 的基本流程是:分配源 Activity(Create ),然後 Activity 容示到幕上(Start )。在一切就後,取得幕的控制(Resume ),使用者可以始使用程式。
呼叫另一 Activity

onPause(1) -> onCreate(2) -> onStart(2) - onResume(2) -> onStop(1)

是先原本的 Activity,再交出直接存取幕能力(Pause )的程。 直到 Activity 2 完成一般流程後,Activity 1 才被停止。
回原 Activity

onPause(2) -> onRestart(1) -> onStart(1) -> onResume(1) -> onStop(2) -> onDestroy(2)

Back 按可以回到原本的 Activity。
退出束

onPause -> onStop -> onDestroy

如果程式中有直接呼叫「finish」函式 Activity的,系假我很定我在做什,因此直接跳先(Freeze)的段,停(Pause),停止(Stop),然後(Destroy)。
回收後再

onCreate -> onStart -> onResume

被回收掉的 Activity 一旦又重新被呼叫,像一般一再次呼叫 Activity 的 onCreate 函式。

我使用「Android」手一子,在手上已行多用程式。只要按下「Back」(返回),「Android」就最近一次的 Activity。

我要是按下多次「Back」(返回),理上早返回到某已—estroy)的 Activity。生什事呢?

如果的 Activity 已被回收了,那 Activity 再次被建立(Create)出。再次被建立出的 Activity,然跟原本我的 Activity 不一啦。

所以如果要再次被建立出的 Activity 看起跟原本的一,那在 Activity 之切,我就要留意保留料:最好在每次 Activity 行到「onPause」或「onStop」先保存料,然後在「onCreate」料出。

我可以使用下章介到的「Preference」(偏好定)等方法之前作的料或定。

读书人网 >移动开发

热点推荐