3

私のアプリは、1つのことを理解していないことを除いて、完全に動作しているようです。ホームボタンを押してアプリに戻ると、以前の状態に(自動的に)復元されます。ホームボタンを押してから、電話がホーム画面(または自分以外のビュー)でスリープ状態になり、アプリに戻ると、以前の状態が(自動的に)復元されます。

さて、キッカーは、電話が私のアクティビティを上にしてスリープ状態になると、以前の状態を自動的に復元しませんが、初期化の開始が発生し、アプリがちょうど開始したかのように動作するため、onCreate()を呼び出しているようです。

インスタンスを保存し、saveInstanceState()を使用して保存された状態を呼び出すことができるので、最終的に問題は解決できますが、私の質問は、Androidが自分のアクティビティからスリープしたが別のアクティビティからスリープしなかった場合にonCreate()を呼び出すのはなぜですか?そして、onCreate()を呼び出さない場合、何が起こっているのか、そしてなぜsaveInstanceState()を気にする必要があるのですか?電話がスリープ状態になるときを除いて、すべてのインスタンスで(メモリ不足を除いて)私のアプリはユーザーを最後の「目印」に戻します私の活動から。

4

3 に答える 3

5

アクティビティが向きPortraitまたはLandscapeにロックしているかどうかを確認します。向きをロックしている場合は、スリープ前およびウェイクアップ時に向きが変更されるときにonCreate()が呼び出されます。

android:configChanges="orientation"これは、マニフェストのアクティビティ タグに追加することで解決できます。

<activity 
android:name=".MainActivity"
android:screenOrientation="portrait"
android:configChanges="orientation"
/>
于 2013-01-06T08:01:32.400 に答える
2

ライフサイクルメソッドに問題がある場合、すべてのアクティビティに onCreate、onPause、onResume などを追加し、log.D("in onPause()") を内部に追加して、どのメソッドが呼び出されているかを正確に追跡します何時に。

于 2012-02-07T21:06:16.950 に答える
0

Android は、以前にアクティビティを破棄した場合にのみ onCreate を呼び出します。この場合、onDestroy が呼び出されます。onCreate が呼び出されずにアクティビティの状態が保持された状況は、単にアクティビティが破棄されず、ずっと実行されたままであった場合です。

インスタンスの状態を保存/復元するタイミングと方法の概要を次に示します。

于 2012-02-08T09:05:40.243 に答える