簡體   English   中英

什么時候調用 onRestoreInstanceState?

[英]when is onRestoreInstanceState called?

抱歉我的不理解,但我是 android 開發的新手。

我有一個包含活動 A 和活動 B 的應用程序,我從活動 A 轉到活動 B。當我離開活動 A 時,調用了onSaveInstanceState方法,但是當我回到活動 A(從同一活動 B 中)應用程序), onCreate方法中的包為空。

我該怎么做才能保存活動 A 的先前狀態? 我只想存儲應用程序生命周期的數據。

有人可以幫我弄這個嗎?

這是我的活動 A 代碼:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState != null)
    {
        Log.v("Main", savedInstanceState.getString("test"));
    }
    else
    {
        Log.v("Main", "old instance");
    }
}  

@Override
public void onSaveInstanceState(Bundle savedInstanceState) 
{
    Log.v("Main", "save instance");

    savedInstanceState.putString("test", "my test string");

    super.onSaveInstanceState(savedInstanceState);
}


public void buttonClick(View view)
{
    Intent intent = new Intent(this, Activity2.class);
    startActivity(intent);
}

這是我的活動 B 代碼,當我按下按鈕返回活動 A 時:

public void onBack(View view)
{
    NavUtils.navigateUpFromSameTask(this);
}

要回答您的問題,請查看 android 文檔: https : //developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle)

它說 onRestoreInstanceState 在活動生命周期中的 onStart() 方法之后被調用。

保存和恢復狀態旨在保存當用戶退出應用程序時已過時的當前臨時數據。 當您通過打開下一個活動來最小化或離開活動時,它可能會因資源不足而被系統殺死,並在您返回時使用savedInstanceState重新啟動。 所以使用onSaveInstanceState()僅用於保存最小化恢復會話數據。

因此,如果您在前面啟動一個新 Activity 並返回到前一個(您正在嘗試執行的操作),則 Activity A 可能不會被殺死(只是停止)並重新啟動而不會被銷毀。 您可以通過選中Don't keep activities在開發人員選項菜單中Don't keep activities來強制殺死它並恢復。

如果您調用finish()或從最近的任務列表中刪除Activity ,則savedInstanceState將不會傳遞給onCreate()因為任務已被清除。

如果該值必須是持久的,請考慮使用SharedPreferences.

發生這種情況是因為您正在艱難地航行。 如果您使用手機的默認后退按鈕導航,您的onCreate將獲得傳入的包。

為了規避這個問題,我建議您將狀態保存到共享首選項以及備份。 當包為空時,從共享首選項中恢復它。

在 onStart() 之后,在 onCreate() 之后

參考

保存實例狀態

... onPause()-> onSaveInstanceState() -> onStop() -> onDestory()

onRestoreInstanceState

onCreate()-> onStart()-> onRestoreInstanceState()-> onPostCreate(Bundle) ...

或者您可以使用LiveData 保存其中的狀態並觀察。如果設備旋轉,它將相應地更新視圖。

在這種情況下,我使用了一個標志和 SharedPreferences。 這應該有效,並且當您更改屏幕方向時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM