2014-03-25 195 views
0

這種情況是這樣的: 我有一個活動,啓動一個線程(通過AsyncTask)。在更改屏幕方向時(使用onSaveInstanceState和onRestoreInstanceState),我得到正確保存並恢復的狀態,線程在onStop()中停止。但是,如果我「最小化」(或更改應用程序)我得到我的狀態保存但不恢復。我能做什麼?如何在停止後恢復活動?

- 編輯:已解決 謝謝各位,我發現了很多類似的答案,但問題還是比較詳細,我認爲一個簡單的問題可能會導致另一個解決方案,但我想我堅持這兩個選項。 onRestoreInstanceState和SharedPreferences。 謝謝!

回答

0

既然狀態保存和恢復的規則取決於你無法輕易預測的情況,我建議使用不同的方法。使用共享偏好可能是最簡單的。以下是存儲選項參考頁面的link,其中顯示瞭如何執行此操作。

1

兄弟,有兩種方法可以解決它。第一個很容易。使用onSaveInstanceState()onRestoreInstanceState()來維護您的活動。第二個方法是使用SharedPreferences :)

0

你需要重寫onSaveInstanceState(Bundle savedInstanceState),寫你想改變的參數捆綁像這樣的應用程序的狀態值:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    // Save UI state changes to the savedInstanceState. 
    // This bundle will be passed to onCreate if the process is 
    // killed and restarted. 
    savedInstanceState.putBoolean("MyBoolean", true); 
    savedInstanceState.putDouble("myDouble", 1.9); 
    savedInstanceState.putInt("MyInt", 1); 
    savedInstanceState.putString("MyString", "Welcome back to Android"); 
    // etc. 
} 

的包基本上存儲的方式NVP(「名稱 - 值對」)的地圖,並將在獲得通過到的onCreate(),也onRestoreInstanceState(),您會提取這樣的價值觀:

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    boolean myBoolean = savedInstanceState.getBoolean("MyBoolean"); 
    double myDouble = savedInstanceState.getDouble("myDouble"); 
    int myInt = savedInstanceState.getInt("MyInt"); 
    String myString = savedInstanceState.getString("MyString"); 
} 

你通常會使用這種技術來存儲您的應用的實例值(選擇,未保存的文本等)。

小心:官方文檔指出,您應該將重要信息保存在onPause-Method中,因爲onsaveinstance-method不是android生命週期的一部分。 developer.android.com/reference/android/app/Activity.html