1

Androidトレーニングを読んだとき、アクティビティライフサイクルの説明が表示されました。

アクティビティが停止すると、Activityオブジェクトはメモリに常駐し、アクティビティが再開すると呼び出されます。Resumed状態に至るまでのコールバックメソッドのいずれかで作成されたコンポーネントを再初期化する必要はありません。システムは、レイアウト内の各ビューの現在の状態も追跡するため、ユーザーがEditTextウィジェットにテキストを入力した場合、そのコンテンツは保持されるため、保存して復元する必要はありません。

コンポーネントを再初期化する必要がないのに、なぜコールバックメソッドでデータや何かを処理する必要があるのか​​混乱しています。

4

3 に答える 3

3

例としてカメラを取り上げます。

コンポーネントを再初期化する必要はありませんが、アクティビティが再開したときにカメラを再初期化する必要があります。コンポーネントは、アクティビティの唯一の部分ではありません。ほとんどのアプリケーションは、システムリソースにもアクセスする必要があります。これらのリソースは、アプリケーションが一時停止または停止したときに解放されるため、アプリケーションが再開されたときに再度初期化する必要があります。また、Androidは状況によってはアプリケーションを破壊する可能性があります(メモリが不足しているなど)。そのため、リソースを解放して再初期化する必要があります。

さらに、アプリケーションの内部状態が存在する可能性があります。たとえば、本の読者。進捗状況を記録する必要があります。この内部状態はコンポーネントではありませんが、アクティビティが一時停止したときにそれらを保存する必要があります。

@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first

    // Release the Camera because we don't need it when paused
    // and other activities might need to use it.
    if (mCamera != null) {
        mCamera.release()
        mCamera = null;
    }
}

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first

    // Get the Camera instance as the activity achieves full user focus
    if (mCamera == null) {
        initializeCamera(); // Local method to handle camera init
    }
}
于 2013-02-21T03:19:53.783 に答える
0

この説明は、停止状態にのみ適用されます。停止したアクティビティも破棄される可能性があるため、アクティビティが後で破棄される場合に備えて、データをonStop()に保存することをお勧めします。onDestroy()コールバックがありますが、呼び出される保証はありません。onStop()は、アクティビティが一時停止から停止に移行するときに呼び出されると信頼できます。AndroidのHoneycomb以前のバージョンでは、onStop()でさえ必ずしも信頼できるとは限らず、onPause()を使用して状態を保存する必要があることに注意してください。Honeycomb以降のバージョンは、onStop()メソッドが返されるまでアクティビティを強制終了しません。

于 2013-02-21T03:16:35.293 に答える
0

アクティビティが停止した場合(つまり、ユーザーがホームを押すか、着信を処理した場合)、アプリケーションのプロセス(および含まれているアクティビティ)は破棄されません。

このシナリオでは、コンポーネントはすでに初期化されており(つまり、アクティビティが停止する前に表示されていたものが表示されています)、アクティビティが再び前面に表示されたとき(ユーザーがアプリを再度開いたとき)、復元する必要はありません。あらゆる種類のデータ。

ただし、しばらくすると、OSがアプリのリソースを再利用し、プロセスを強制終了することを決定する場合があります(または、ユーザーがホームアクティビティから戻るボタンを押す場合があります)。この他のシナリオでは、ユーザーがアプリに戻るたびにアクティビティの状態を復元するために、アクティビティの状態を保存することになっています。

onSaveInstanceStateを使用できます

または、onStop()の設定に保存するだけです

于 2013-02-21T03:18:20.610 に答える