2

アプリ開発の初期段階にある間、アクティビティでonSaveInstanceState()データを保存しBundle、状態を復元するために使用していonCreate()ました。これは、たとえば、ローテーション中のテストをすばやく行うのに役立ちます。次に、データの一部、たとえば整数を実行間で永続化する必要があると判断したためSharedPreferencesonPause(). 問題は、バンドルの保存/復元バージョンを安全に削除して、保存onSaveInstanceState()の永続的なバージョンのみに依存できるか、または両方を保持してonCreate()両方のソースをチェックし、存在する方を取得することですか?

私はここで同様の投稿をたくさん掘り下げましたが、何人かの人々は で次のパターンを使用していると言っていますonCreate():

if (savedInstance != null && ...contains the saved data...) {
    ...use the saved data...
} else {
    ...load the saved data from preferences...
}

だから、私も同じものを保存しなければならonSaveInstanceState()ないシナリオがあるのだろうか?上の部分だけ使いたい。onPause()Bundleelse

4

1 に答える 1

1

いいえ、 onPauseメソッドに入らないシナリオはありません(onCreate で finish を呼び出す場合を除いて)。このメソッドは Activity ライフサイクルの主要部分であるためです。

ただし、 onSaveInstanceStateが 4.0 以降のデバイスで呼び出されないシナリオがあります。デバイスのメモリが極端に少なく、大量のメモリを必要とする新しいアクティビティが画面に表示される場合に発生する可能性があります。

于 2014-09-12T10:13:50.067 に答える