1

特定の状況下では、すべてのアクティビティが強制終了される可能性があります (「他のアプリケーションがメモリを必要としている」など)。この後onCreate、アクティビティで再度呼び出されます。

ドキュメントには、この場合「プロセスが強制終了された」と記載されています。これは、Activity インスタンス全体が gc されて再構築されることを意味しますか、それとも GUI 部分のみですか?

与えられた:

public class MyActivity extends Activity
{
    private SomeClass someProperty = null;

    @Override
    protected void onCreate (Bundle savedInstanceState)
    {
        super.onCreate (savedInstanceState);
        if (someProperty == null) someProperty = new SomeClass ();
        Log.d ("X", someProperty.toString () );
    }
}

アクティビティが殺され、再び前面に出た後になりますか、それとも同じでしょうかsomeProperty?nullsomeProperty

「他のアプリケーションがメモリを必要とする」という条件をエミュレートするのは難しいので、私はこれを求めています。

4

1 に答える 1

2

onSaveInstanceState()メソッドで何もしないと null になります。アクティビティのライフサイクルに関するこのAndroid デベロッパー ガイドを読むと、役に立つ情報が見つかるかもしれません。

somePropertyアクティビティが正常に破棄されなかった場合 (つまり、ユーザーが [戻る] ボタンを押すか、アプリが finish() を呼び出した場合) に保存する場合は、メソッドをオーバーライドして、必要なonSavedInstanceState()ものを保存できます。上記のリンク先のチュートリアルには、より明確な例があります。

また、アクティビティのライフサイクルを非常に明確に説明する別の記事とさらに別の記事があります。

お役に立てば幸いです。

編集:が呼び出されない 場合onSavedInstanceState()(つまり、「通常どおり破壊する」、紛らわしい表現になる可能性があります) について、この記事では次のように述べています。

ユーザーがアクティビティを操作して [戻る] ボタンを押した場合、またはアクティビティの finish() メソッドが呼び出された場合、アクティビティは現在のアクティビティ スタックから削除され、再利用されます。この場合、保存するインスタンスの状態はなく、onSaveInstanceState() メソッドは呼び出されません。

ユーザーがアクティビティを操作してホーム ボタンを押した場合、アクティビティ インスタンスの状態を保存する必要があります。onSaveInstanceState() メソッドが呼び出されます。ユーザーがアプリケーションを再起動すると、最後に実行されたアクティビティが再開または再開されます。アクティビティを再開すると、保存データを含むバンドルが onRestoreInstanceState() および onCreate() メソッドに提供されます。

于 2013-09-22T01:49:33.340 に答える