Android公式開発文書Trainingシリーズ中国語版:Activityを管理するライフサイクルの停止とActivityの再起動
原文の住所:http://android.xsoftlab.net/training/basics/activity-lifecycle/stopping.html#Start
activityのライフサイクルにおいて、適切な停止とactivityの再起動は非常に重要なプロセスであり、ユーザーがAPPが常に生きている状態であることを確認し、彼らの進捗を失わないようにすることができます.ここにはいくつかの重要なシーンがあります.activity停止と再起動に適用されます.ユーザは最新のAPPを使用するウィンドウを開けてから、あなたのAPPから別のAPPに切り替えました.現在APP内のactivityはバックグラウンドにあり、停止状態にあります.ユーザーがデバイス画面のメイン画面からアイコンをクリックしたり、最近のAPPを使ったウィンドウからAppに戻ったら、元のactivityは再起動されます. ユーザは、APP内で新しいactivityを起動する動作を実行した.今のこのactivityは二番目のactivityを作成する時に停止します.ユーザーが戻るボタンを押すと、最初のactivityが再起動されます. ユーザはAPPを使う時に電話を受けました. Activityクラスは、activity単独の処理停止状態と再起動状態を与える2つのライフサイクル関数を提供します.ローカルUIが遮断されている一時停止状態とは異なり、停止状態保証UIは可視ではなく、ユーザの焦点は別のActivityに移っているに違いない.
ノート:システムはactivityが停止した時にメモリに存在しますので、ワンストップの方法とワンストップの方法、さらにワンストップの方法を実現する必要がないかもしれません.大多数の活動が比較的簡単なために、activityは停止と再起動だけが必要です.OnPause方法を使用して、進行中の活動を停止し、システム資源を解放するだけかもしれません.
上の図:ユーザーがactivityを離れたら、システムはワンストップメソッドを呼び出してactivityを停止します(1).ユーザーがactivityの停止状態から戻った場合、システムはonRestartメソッド(2)を呼び出し、その後すぐにワンストップメソッド(3)とワンストップメソッド(4)を呼び出します.注意activityが停止しているときの状況は気にしないでください.システムは常にワンストップ前にワンスペースを呼び出します.
Activityを停止します
activityのワンストップメソッドが呼び出された場合、activityはもう見えなくなり、ユーザが使用する必要がないすべてのリソースを解放する必要があります.activityが一旦停止したら、システムがシステムメモリを復元する必要があると、システムはこのactivityを廃棄します.極端な場合、システムはAPP全体を殺し、activityのオンデマンドメソッドを呼び出すことができないので、オンストップ方式を使って資源を放出すべきです.これらの資源はメモリリークを引き起こす可能性があります.これは深刻です.
onPause方法はonStopの前に呼び出されましたが、onStopを使ってより大きく、より多くのCPUの高負荷操作を実行してください.例えば、情報をデータベースに書き込みます.
この例はワンストップ方式を実現し、方法内で原稿の内容を持続的に保存しました.
Note:activityさえ停止した状態でシステムによって破壊されても、一つのBundleにViewオブジェクトの状態(EditText中のテキストなど)を保存し、ユーザーがこれらのActivityのインスタンス(元のオブジェクトが破壊され、このオブジェクトが再作成された)に戻った時にそれらを回復することができます.(次の授業では、Activityの廃棄や再作成時にBunndleを使って他の状態のデータを記憶または読み込みすることについて議論します).
Activityを起動/再起動する
Activityが停止状態からフロントに戻ると、システムはオンスタートメソッドとオンスタートメソッドを呼び出します.このような呼び出しはactivityで見られるたびに現れます.しかし、オンリータートメソッドはactivityが停止状態から回復したときにのみ呼び出されます.この方法を使って、いくつかの特別な必要な復旧作業を行うことができます.activityに限られます.焼却状態ではなく状態です.
APPはonRestart方法を使ってactivityの状態を回復するのは通用しないので、この方法は一般的に人気のあるAPPの使用例に適用できます.しかし、ワンストップ方法は本来はすべてのactivity資源を整理するべきですので、activityを再起動する時にもう一度実用化する必要があります.また、activityが初めて作成した時にも実用化してください.このactivityのインスタンスが存在しない場合には、この理由に対して、オンストップメソッドに対応するオンストップ方法を使うべきです.システムはactivityを作成する時と停止状態でactivityを再開する時に、ワンストップメソッドを呼び出します.
例を挙げると、長い間見られないactivityをユーザーが持ってきてくれる可能性があるので、オンストップ方法はシステムの特性が利用できるかどうかを検証するいいところです.
activityのライフサイクルにおいて、適切な停止とactivityの再起動は非常に重要なプロセスであり、ユーザーがAPPが常に生きている状態であることを確認し、彼らの進捗を失わないようにすることができます.ここにはいくつかの重要なシーンがあります.activity停止と再起動に適用されます.
ノート:システムはactivityが停止した時にメモリに存在しますので、ワンストップの方法とワンストップの方法、さらにワンストップの方法を実現する必要がないかもしれません.大多数の活動が比較的簡単なために、activityは停止と再起動だけが必要です.OnPause方法を使用して、進行中の活動を停止し、システム資源を解放するだけかもしれません.
上の図:ユーザーがactivityを離れたら、システムはワンストップメソッドを呼び出してactivityを停止します(1).ユーザーがactivityの停止状態から戻った場合、システムはonRestartメソッド(2)を呼び出し、その後すぐにワンストップメソッド(3)とワンストップメソッド(4)を呼び出します.注意activityが停止しているときの状況は気にしないでください.システムは常にワンストップ前にワンスペースを呼び出します.
Activityを停止します
activityのワンストップメソッドが呼び出された場合、activityはもう見えなくなり、ユーザが使用する必要がないすべてのリソースを解放する必要があります.activityが一旦停止したら、システムがシステムメモリを復元する必要があると、システムはこのactivityを廃棄します.極端な場合、システムはAPP全体を殺し、activityのオンデマンドメソッドを呼び出すことができないので、オンストップ方式を使って資源を放出すべきです.これらの資源はメモリリークを引き起こす可能性があります.これは深刻です.
onPause方法はonStopの前に呼び出されましたが、onStopを使ってより大きく、より多くのCPUの高負荷操作を実行してください.例えば、情報をデータベースに書き込みます.
この例はワンストップ方式を実現し、方法内で原稿の内容を持続的に保存しました.
@Override
protected void onStop() {
super.onStop(); // Always call the superclass method first
// Save the note's current draft, because the activity is stopping
// and we want to be sure the current note progress isn't lost.
ContentValues values = new ContentValues();
values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());
getContentResolver().update(
mUri, // The URI for the note to update.
values, // The map of column names and new values to apply to them.
null, // No SELECT criteria are used.
null // No WHERE columns are used.
);
}
activityが停止状態にあると、Activityオブジェクトはシステムに存在し、activityが回復したときに再起動されます.他のコールバック方法で作成したオブジェクトを再実装する必要はありません.システムは各Viewの状態を維持しますので、ユーザーがEditTextに文字を入力したら、これらの内容はメモリに保存されますので、わざわざ保存して復元する必要はありません.Note:activityさえ停止した状態でシステムによって破壊されても、一つのBundleにViewオブジェクトの状態(EditText中のテキストなど)を保存し、ユーザーがこれらのActivityのインスタンス(元のオブジェクトが破壊され、このオブジェクトが再作成された)に戻った時にそれらを回復することができます.(次の授業では、Activityの廃棄や再作成時にBunndleを使って他の状態のデータを記憶または読み込みすることについて議論します).
Activityを起動/再起動する
Activityが停止状態からフロントに戻ると、システムはオンスタートメソッドとオンスタートメソッドを呼び出します.このような呼び出しはactivityで見られるたびに現れます.しかし、オンリータートメソッドはactivityが停止状態から回復したときにのみ呼び出されます.この方法を使って、いくつかの特別な必要な復旧作業を行うことができます.activityに限られます.焼却状態ではなく状態です.
APPはonRestart方法を使ってactivityの状態を回復するのは通用しないので、この方法は一般的に人気のあるAPPの使用例に適用できます.しかし、ワンストップ方法は本来はすべてのactivity資源を整理するべきですので、activityを再起動する時にもう一度実用化する必要があります.また、activityが初めて作成した時にも実用化してください.このactivityのインスタンスが存在しない場合には、この理由に対して、オンストップメソッドに対応するオンストップ方法を使うべきです.システムはactivityを作成する時と停止状態でactivityを再開する時に、ワンストップメソッドを呼び出します.
例を挙げると、長い間見られないactivityをユーザーが持ってきてくれる可能性があるので、オンストップ方法はシステムの特性が利用できるかどうかを検証するいいところです.
@Override
protected void onStart() {
super.onStart(); // Always call the superclass method first
// The activity is either being restarted or started for the first time
// so this is where we should make sure that GPS is enabled
LocationManager locationManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!gpsEnabled) {
// Create a dialog here that requests the user to enable GPS, and use an intent
// with the android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS action
// to take the user to the Settings screen to enable GPS when they click "OK"
}
}
@Override
protected void onRestart() {
super.onRestart(); // Always call the superclass method first
// Activity being restarted from stopped state
}
システムがActivityを破壊する必要があるときは、activityのone Destoryメソッドを呼び出します.通常はワンストップ方式で大部分のリソースを放出しますので、ワンデスティッティメソッド内では何をする必要がありません.この方法はメモリが露出してしまう可能性があるリソースを整理する最後の機会です.他の付属スレッドおよび他の類似方法を確保してください.長い間行方不明になっていた作業も廃棄されました.