6

この質問はstackoverflowで以前に尋ねられましたが、答えはどれもうまくいきませんでした。

おそらく言及する価値があります:

  • サポート パッケージで ActionBarSherlock を使用しています。
  • onSaveInstanceStateホームボタンを押すとメソッドISが呼び出されます。このメソッドonCreateは、常に NULL を返しますBundle savedInstanceState
  • メソッドonRestoreInstanceStateはまったく呼び出されません。(うまくいったかどうかは気にしませんonCreate;))。
  • また(関係ないはずですが)super.onSaveInstanceState(outState)の一番下に入れてみましたonSaveInstanceState。運もありません。

これがコードです。誰かがこの問題を抱えて解決したことを願っています。

public class MainActivity extends SherlockFragmentActivity {

    private static final String LOG_TAG = MainActivity.class.getSimpleName();

    private static String STATE_TO_STORE = "state_to_store";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        

        Log.d(LOG_TAG, "onCreate: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL"));

        // ... more code...
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        Log.d(LOG_TAG, "onRestoreInstanceState: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL"));
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        outState.putInt(STATE_TO_STORE, 5); // store some int

        Log.d(LOG_TAG, "onSaveInstanceState bundle: " + outState.toString());
    }

    // ... more code ...

}

ログには、呼び出されていることが明確に示さonSaveInstanceStateれ、 onCreate gets が取得されますsavedInstanceState = NULL

4

4 に答える 4

3

私の場合、その理由は、特定のアクティビティにマニフェスト ファイルで宣言されたテーマがなかったためです。

これを修正するには、AndroidManifest.xml を開き、[アプリケーション] をクリックして、[アプリケーション ノード] でクラッシュしているアクティビティを選択し、[属性] の [テーマ] フィールドにテーマを追加します。私の場合はそうでした

@style/Theme.AppCompat.Light.DarkActionBar

ただし、他のアクティビティの 1 つからテーマをコピーできます。

PS: これは古い質問への回答であることはわかっていますが、修正を探しているときに偶然見つけて、有効な解決策が見つからなかったため、他の人に役立つかもしれません。

于 2014-02-05T21:01:53.923 に答える
2

ホームボタンを押すと、アクティビティは一時停止し、破棄されません。したがって、ホーム画面からアプリを再度起動すると、OS がアプリを強制終了してメモリを再利用しない限り、onCreate は呼び出されません。ホーム画面から起動したときにアクティビティを再作成する場合は、この行android:finishOnTaskLaunch="true"をアクティビティ マニフェストに追加します。

于 2013-03-28T16:34:12.350 に答える
2

onRestoreInstanceState (または onCreate に保存されたバンドル) は、アクティビティがリソース不足のためにシステムによって強制終了されたときに起動され、アクティビティに戻ったときに再起動されます。アクティビティは、onRestoreInstanceState を経由せずに強制終了されず (停止しただけ)、再開される場合があります。つまり、onSaveInstanceState は常に呼び出されますが、onRestoreInstanceState は、システムによって強制終了および復元された場合に呼び出されます。停止して再開しただけでなく、一時停止して再開したり、新しい意図によって開始したりしません。

ここで私の説明を確認してください。私はそれがあなたの質問をカバーしていると確信しています。

onRestoreInstanceState はいつ呼び出されますか?

于 2013-03-28T16:30:44.647 に答える