回答
爲什麼你需要保持變量存活?考慮到Android應用程序的建立生命週期,我不確定阻止活動被破壞「僅僅爲了保持變量」是合理的。
即使您在不破壞應用程序的情況下停止應用程序,Android始終有可能殺死它以釋放內存。無論如何,您必須在代碼中對此進行解釋,因此防止應用程序被破壞並不會使您無法編寫代碼。
使用onPause()和onResume()方法中的SharedPreferences,可以相對容易和快速地保存和恢復變量。除非您存儲大量數據,否則防止應用程序被破壞可能沒有多大區別。
這聽起來像你想保留變量在內存中,因爲你打算返回到這個活動。通常情況下,您不會使用後退按鈕來遠離您想要返回的活動。相反,您會創建一個意圖並開始一個新的活動。當你這樣做時,Android將當前活動放在Back Stack上,調用onPause()和onStop(),這看起來就像你正在尋找的行爲。
所以,如果你還真想防止被破壞(至少要等到Android的決定是使用過多內存,並殺死它在它自己),你總是可以使用薩格爾的代碼,並在啓動一個新的活動你的活動onBackPressed()。
@Override
public void onBackPressed()
{
Intent intent = new Intent(this, Other.class);
startActivity(intent);
}
只要確定那是你真正想要做的。
謝謝,作品...只是一個細節,我應該如何讓它知道哪個活動開始了這個活動,以便它知道要返回哪個活動? – Roger
如果您只想返回到上一個活動,那麼爲什麼後退按鈕的正常功能不可接受?您可以通過在用於使用intent.putExtra(「activity_name」,「activity_1」)開始第二個活動的Intent中包含有關它的信息,然後在第二個活動中檢索該名稱來確定第一個活動。但是,除非你在做一些非常不尋常的事情,否則你的興趣可以通過在onPause()和onResume()中正確保存你的數據,而不必重寫onBackPressed()來獲得。 – theisenp
+1進行詳細深入的迴應! –
這與之前詢問的this question類似。
希望這會有所幫助! N.S.
關閉,但「moveTaskToBack(true);」停止整個應用程序(即充當「家」按鈕),而我只需要停止一個活動。 – Roger
按BACK鍵觸發Activity
類的onBackPressed
回調方法。此回調的默認實現調用finish()
方法。
http://developer.android.com/reference/android/app/Activity.html#onBackPressed()
您可以覆蓋此方法來移動活動背景(模擬天生按HOME鍵的作用
如:
@Override
public void onBackPressed() {
onKeyDown(KeyEvent.KEYCODE_HOME);
}
你也可以改爲考慮moveTaskToBackground()
提到這裏:
首先,抱歉沒有回答問題,原因,我仍然沒有最佳答案。 但是,當人們開始問「你需要什麼」時,我真的很喜歡。而且,很少有人問這個問題,確實值得這樣的問題。我覺得沒有這個時間,但沒關係,這不是問題......
無論如何,我會嘗試指出爲什麼我們有些人深信,
從活動A到活動B(創建UI基於一些數據提取)和從B返回到A(銷燬所有創建的UI和/或B中獲取的數據)有時是一個壞概念。更好的解決方案是將堆棧保持原樣,因此在Activity B中使用finish(),但將Activity B保持爲Pause狀態,以便稍後再次從Activity A調用它時 - 它只會在onResume =沒有重新創建在UI中,不需要額外的數據提取。當然,獎金是一個快速響應的用戶界面,如果你有更復雜的用戶界面佈局,這種差異是真的。
簡單的一行
@Override
public void onBackPressed() {
mActivity.moveTaskToBack(true);
}
真棒。剛剛解決了我的問題,一行 – Jigar
最好的答案,解決了一行中的問題。 –
我設法找出你想要什麼: 2個活動之間切換使用後退按鈕並保持所有不被摧毀!
例如:你有2個活動& B. A將首先啓動,然後在裝入B調用B.,用戶按下返回鍵和切換回從B.活動距離現在B應該在不會被破壞,只是進入背景,當用戶再次從A開始活動B時,活動B將被帶到前臺,而不是被重新創建或創建新的實例!
如何實現這一點:
1.覆蓋onBackPressed()活動B的:
@Override
public void onBackPressed() {
Intent backIntent = new Intent(this, ActivityA.class);
backIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(backIntent);
}
2.在活動A,呼叫活動B:
public void callActivityB() {
Intent toBintent = new Intent(this, ActivityB.class);
toBIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(toBintent);
}
記得要加標誌:Intent.FLAG_ACTIVITY_REORDER_TO_FRONT當您致電A & B.
只需在活動清單中指定爲
android:persistent="true"
這應該可以防止你的活動被破壞。爲了更多地瞭解這個請參考這是由我回答了這些鏈接如下
How to prevent call of onDestroy() after onPause()?
Prevent activity from being destroyed as long as possible
在上面的帖子我已經詳細的使用情況說明
該屬性不存在以下活動:https://developer.android.com/guide/topics/manifest/activity-element.html – jekatt
@jekatt它確實存在https://developer.android.com/guide/topics/ manifest/application-element.html –
@ aravind.udayashankara此屬性用於'
- 1. java.lang.IllegalStateException:(活動已被銷燬)
- 2. 活動時Android停止線程在銷燬時的活動
- 3. 當另一個活動停止時銷燬活動
- 4. 如何銷燬活動?
- 5. 如何在註銷時銷燬活動?
- 6. 如何在活動被銷燬時從LinearLayour存儲對象?
- 7. onSaveInstanceState保留活動的最新狀態,即使活動已銷燬或停止
- 8. 如何停止銷燬會話
- 9. Android:檢查活動是否被系統從服務中銷燬
- 10. 狀態下,當活動被銷燬
- 11. java.lang.IllegalStateException:活動已被銷燬 - Android片段
- 12. 銷燬/停止線程
- 13. 停止對銷燬應用
- 14. 停止/銷燬線程
- 15. 如何從父活動停止活動?
- 16. Android:活動不會被銷燬使用命令'finishActivity(999)'
- 17. 如何在onPostExecute中確定該活動現在沒有暫停或被銷燬?
- 18. 如何在我的活動更改或銷燬時停止ASyncTask崩潰?
- 19. 銷燬活動如何運作?
- 20. 如何銷燬Android中的活動?
- 21. 如何在銷售時不銷燬當前活動
- 22. 如何銷燬Android活動被破壞時的本機進程
- 23. 如何防止活動在android應用程序中銷燬?
- 24. Android - 如何在動畫停止後銷燬對象?
- 25. 調用onPostExecute中的主要活動(在活動被銷燬或處於停止狀態後)
- 26. 無法銷燬活動... java.lang.NullPointerException:observer
- 27. 銷燬活動堆棧
- 28. 銷燬活動堆棧
- 29. 正確的方法來知道活動是否已被銷燬
- 30. 線程被銷燬時,變量是否被銷燬?
的http:// stackoverflow.com/questions/3141996/android-how-to-override-the-back-button-so-it-doesnt-finish-my-activity –
類似,但它在後退鍵按下時運行主要活動。我只需要停下來(即暫停並移動到背景,從而返回到之前的活動)。 – Roger
什麼/多少變數?他們如何被使用?您可以考慮將它們設置爲類變量,而不用擔心使活動保持活動狀態。 – Rob