2009-09-20 137 views
9

我有3種不同的活動,用戶之間以無特定順序導航。我的目標是雙重的:Android - 恢復上次查看的活動

  1. 當用戶切換到別的東西時,應用程序恢復,我想談談在那裏用戶離開,即使應用程序被終止
  2. 當最後一個活動恢復我想將其恢復到上次查看狀態(這個我覺得我對如何才達到一個不錯的主意)

我覺得這個問題是不是開始/停止 - 在那裏我幾乎得到了我所需要的,但onCreate()如果應用程序被終止。在這種情況下 - 它選擇我在清單中配置的Activity。我想我可以在默認活動的onCreate()方法中添加一些東西,但是有沒有更好的方法可能會丟失?

回答

6

如果您的應用程序還沒有被「終止」,那麼#1應該已經工作,#2只需要保存沒有被自動地管理到捆綁任何值onSaveInstanceState()然後onRestoreInstanceState()恢復它們。

這是一種破解,但我認爲在應用程序實際被終止的情況下,您最好的選擇是將最近的Activity保存在每個Activity類的onResume中,然後當您第一次運行你的第一個活動的onCreate做一個檢查,然後開始正確的活動...也許甚至在一開始就把一個空白的活動。事情是這樣的:

StartActivity:

public class StartActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // get last open Activity 
     String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", ""); 
     if (last_activity == MyActivity2.getSimpleName()) { 
      startActivityForResult(new Intent(this, MyActivity2.class)); 
     } else if (last_activity == MyActivity3.getSimpleName()) { 
      startActivityForResult(new Intent(this, MyActivity3.class)); 
     } else { 
      // assume default activity 
      startActivityForResult(new Intent(this, MyActivity1.class)); 
     } 
    } 

    public void onActivityResult() { 
     // kill the activity if they go "back" to here 
     finish(); 
    } 
} 
所有其他活動(MyActivity1,2,3)保存的值,像這樣

然後:

@Override 
public void onResume() { 
    Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit(); 
    e.putString("last_activity", getClass().getSimpleName()); 
    e.commit(); 

    super.onResume(); 
} 

您還必須處理手動保存/恢復每個活動的數據。您可以將所需的所有值保存到每個活動的onPause()內的首選項中,然後在onResume()中將其恢復。

+0

謝謝fiXedd,我不認爲這是一個破解。這聽起來像一個調度模式。我只是希望我錯過了一些東西,還有更簡單的方法。 – Bostone 2009-09-20 18:38:39

+0

如何做startActivity,然後完成()而不是startActivityForResult? – 2011-08-20 19:06:42

+0

還要注意清單中您的活動launchMode設置。我已將它設置爲「singleTask」,但將其更改爲「singleTop」以便正確恢復最後一次活動。我在http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode找到了一個很好的解釋。 – 2012-12-14 12:02:15

0

我相信你想要實現onSaveInstanceState並且會將你的活動當前狀態存儲在一個包中。該捆綁包將通過onCreate傳遞到您的活動中,您可以使用它重置您的值。

http://developer.android.com/guide/topics/fundamentals.html#actstate

+0

據我瞭解,這主要用於#2。我需要選擇用戶最近查看的活動。然後我可以恢復其狀態 – Bostone 2009-09-20 02:31:58

1

請注意,onSaveInstanceState()對於長期狀態不可行,即用戶將電話關閉,然後在不確定點將其重新打開。如果您希望您的州能夠通電,您需要創建自己的長期狀態機制。