簡體   English   中英

按下“后退”按鈕時如何終止活動?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM