2014-12-01 64 views
0

我有一個的onPause和的onResume,看到兩個:的onResume工程,即使活動開始

@Override 
public void onResume(){ 
    super.onResume(); 
    String str = ""; 

    SharedPreferences prefs = this.getSharedPreferences(
      "com.example.app", Context.MODE_PRIVATE); 
    for (int i = 0; i<prefs.getAll().size(); i++){ 
     str = prefs.getString(String.valueOf(i), ""); 
     meds.add(str); 
     adap.add(str); 
     adap.notifyDataSetChanged();}} 


    @Override 
public void onPause() { 
    super.onPause(); 
    SharedPreferences prefs = this.getSharedPreferences(
      "com.example.app", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = prefs.edit(); 
    for (int i = 0; i<meds.size(); i++){ 
     editor.putString(String.valueOf(i), meds.get(i)); 
     String str1 = editor.toString(); 
     String str = prefs.getString("0", ""); 

    } 
    editor.commit(); 
} 

現在能正常工作時,我真的想恢復活動-say,用戶按下後退按鈕。

但是,當我完全重新啓動應用程序(如:關閉程序,再次運行),顯然onResume被調用是因爲我的數據設置爲保存在onPause中的數據。

我剛使用了錯誤的方法嗎? 實際重新啓動應用程序時,我想從我的默認數據開始,而不是使用onPause中保存的內容。

+3

請參閱[Activity LifeCycle](http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle)每次啓動新活動時都會調用OnResume。 – 2014-12-01 19:05:15

+0

嗯。所以如果我不想在重新啓動應用程序時獲得我的數據,我必須在onDestroy中銷燬它們。因爲程序停止時調用onDestroy? – user1862770 2014-12-01 19:08:56

+2

實際上[onDestroy](http://developer.android.com/reference/android/app/Activity.html#onDestroy%28%29)是不可靠的,並且可能不會在某些情況下調用,例如操作系統殺死您的活動滿足記憶要求。 – 2014-12-01 19:15:09

回答

1

OnResume總是在您啓動新活動時被調用。你可以從Activity LifeCycle看到這個。如果您不想在重新啓動應用程序時獲取數據,請在內使用isFinishing()方法,如果它返回true請在關閉Activity之前清除所有內容。

isFinishing()檢查此活動是否處於完成過程中,要麼是因爲您調用了finish(),要麼是其他人要求完成。

+0

謝謝,只是測試。當我簡單地關閉模擬器或手機時,我想這不起作用,是嗎?如果沒有時間調用該方法.... – user1862770 2014-12-01 19:21:53

+1

當您還在進行活動時,您是否嘗試關閉手機?它不會調用'onPause'? – 2014-12-01 19:32:36

+0

是的,我試過了,你當然是正確的,onPause沒有被調用,寫這個答案,我會接受它。我的壞 - 我應該重寫OnBackPressed而不是onPause。那麼我現在應該怎麼處理這個問題,在stackoverflow上可以接受什麼呢? – user1862770 2014-12-01 19:44:54

0
  1. 的onCreate()設置的默認值。在的onResume
  2. )獲得最新的數值,然後更新的 吃藥ADAP
  3. 的onPause
  4. 的()的值保存您的喜好..這是你是什麼 現在做的事情。 。
  5. 你不必清除喜好他們的onDestroy(), 因爲沒有保證的系統調用的onDestroy()
+0

ahm .....這完全是我現在正在做的。然後會發生什麼:應用程序啓動,Activity運行onCreate,設置默認值。然後運行onResume,更新我的值。這正是我不想要的。 – user1862770 2014-12-01 19:35:59

+0

由於您不需要維護以前的應用程序狀態,因此不需要使用首選項,而是在活動從onPause()切換到onResume()時使用某個成員變量臨時存儲您的值.hops this suit你的要求:) – andand 2014-12-01 19:45:12

+0

這是爲你工作? – andand 2014-12-02 10:41:15