2017-02-01 43 views
0

我正在處理一個應用程序,其中我從活動A(主要活動)移動到活動B到活動C. 所有這些工作正常,但問題發生當用戶通過從任務欄中刪除應用程序來終止應用程序時如果用戶手動殺死應用程序,則從其離開的位置恢復活動

爲了理解我的問題,說用戶從A移到B然後C,但是在完成活動C中的任務之前,用戶殺死了應用程序。 所以當用戶再次按下應用程序圖標打開應用程序時,我想啓動最後一個活動C,其中用戶當他殺死應用程序而不是Android默認行爲啓動(主要活動A)一個新的應用程序實例。

我曾嘗試:

1)我試圖用「的onSaveInstanceState」和「onRestoreInstanceState」,但我認爲,當方向改變使用它們,或者我們通過按後退按鈕返回。

2)我試圖保存一切在「onPause」作爲onpause調用99.99%次當活動銷燬,並通過使用靜態標誌我打開最後一個活動,它爲我工作,但我想一些很好的例子或技術這項工作。

所以任何人都可以幫助我實現相同.. ??

我請求其他會員提供代碼示例。

在此先感謝。

+1

嘗試使用sharedPreferences概念,在打開該活動時將活動名稱保存在sharedPreferences中,然後在重新打開該應用程序時檢查sharedPreferences值。我想你明白了! –

+0

你在正確的軌道上。 – mallaudin

+0

@ W4R10CK感謝您的答覆,你的方法是正確的,但正如我已經提到,我已經試過這個,它工作正常。 所以不介意,但我正在尋找一些更好的解決辦法,我的問題是,如果任何人都可以提供一些更好的方法來解決問題。 –

回答

0

當進程即將被殺死時,用於啓動活動的Intent被系統保存。一旦用戶返回已被殺死的應用程序,則應用程序被恢復,並且相同的Intent(Activity A在你的情況下)被開除,以啓動包括它可能具有的所有附加功能的活動。

轉到SharedPrefrences:https://developer.android.com/reference/android/content/SharedPreferences.html 請參閱官方文檔。

+0

我想,只有當**系統**殺死應用程序時,這纔是真實的。即當資源不足時。 – mallaudin

+0

是的,但問題是「所有這些工作都正常,但是當用戶通過從應用程序任務欄中刪除應用程序來終止應用程序時,就會出現問題。」它類似於從TaskTray手動刪除它。 – Akshay

1

,你可以在每一個Activity@onPause()使用SharedPreferences存儲上次的用戶狀態。@的onPause活動

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); 
editor.putString("state", "A/B/C"); 
editor.commit(); 

的onResume活動

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String stateApp = prefs.getString("state", null); 

if (stateApp != null) { 
    switc(stateApp){ 
     case 'A': 
     // Go TO A activity 
     break; 

     case 'B': 
     // Go TO B activity 
     break; 
     default: 
     // Go TO C activity 
     break; 

    } 
} 
5

商店的狀態。

所以在每一個Activity你想:

@Override 
protected void onPause() { 
    super.onPause(); 

    SharedPreferences prefs = getSharedPreferences("RESTART", MODE_PRIVATE); 
    Editor editor = prefs.edit(); 
    editor.putString("last_left", getClass().getName()); 
    editor.commit(); 
} 

而一個Shell活動,這將是一個發射器,主要活動:

public class Shell extends Activity { 

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

     Class<?> classActivity; 

     try { 
      SharedPreferences prefs = getSharedPreferences("RESTART", MODE_PRIVATE); 
      classActivity = Class.forName(prefs.getString("last_left", getClass.getName())); 
     } 
     catch(ClassNotFoundException ex) { 
      classActivity = your_Activity1.class; 
     } 

     startActivity(new Intent(this, classActivity)); 
    } 
} 

[來源加減]

+1

這是一個很好的解決方案,但他也想保存狀態。所以我想在onResume中,您可以像解決方案一樣保存最新活動,並在onPause中保存狀態並在可用時進行恢復。 – savepopulation

相關問題