[英]How do I kill an Activity when the Back button is pressed?
我有一個活動,當它啟動時,它從互聯網加載圖像。 為了節省內存,當按下后退按鈕留下Activity時,我希望活動轉儲所有數據,即刪除其中的所有字符串和圖像。 我認為最好的方法是殺死活動。
好吧,我似乎無法弄清楚按下后退按鈕時的回調。 所以,我一直在嘗試使用onPause()
和onStop()
回調來完成任務,但兩種方式都強制關閉我的應用程序。 這是代碼:
public void onPause() {
this.finish();
}
public void onStop() {
finish();
}
我嘗試過多種變體,但似乎都沒有。 有任何想法嗎?
簡單覆蓋onBackPressed方法:
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
將此添加到您的活動中
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
finish();
}
return super.onKeyDown(keyCode, event);
}
public boolean onKeyDown(int keycode, KeyEvent event) {
if (keycode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
}
return super.onKeyDown(keycode, event);
}
我的應用程序以上面的代碼關閉
首先, finish()
不會破壞你的進程並釋放內存。 它只是從活動堆棧中刪除活動。 你需要殺死這個過程,這個問題在一堆問題中得到了解答(因為這是多次被問到的)。
但正確的答案是 - 不要這樣做。 Android OS會在需要內存時自動釋放內存。 通過不釋放內存,如果用戶返回應用程序,您的應用程序將啟動得更快。
請看這里有關該主題的精彩報道。
好吧,如果你研究的應用程序生命周期的運作,該結構在這里 ,那么你會來知道onPause()
被調用時,另一個活動獲得焦點,和onStop()
當activity不再可見被稱為。
根據我所學到的,您只能從活動和/或具有焦點的活動中調用finish()
。 如果您從onPause()
方法調用finish()
,則表示您在活動不再處於活動狀態時調用它。 因此拋出異常。
當您從onStop()
調用finish()
,活動將被發送到后台,因此將不再可見,然后是此異常。
按back
按鈕時,會調用onStop()
。
最有可能的是,Android會自動為您提供您當前想要做的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.