36

我有一个活动,当它启动时,它会从互联网加载图像。为了节省内存,当按下后退按钮离开活动时,我希望活动转储所有数据,即摆脱其中的所有字符串和图像。我认为最好的方法就是终止活动。

好吧,我似乎无法弄清楚按下后退按钮时的回调。因此,我一直在尝试对任务使用onPause()onStop()回调,但两种方式都强制关闭我的应用程序。这是代码:

public void onPause() {
    this.finish();
}
public void onStop() {
    finish();
}

我已经尝试了多种变体,但它们似乎都不起作用。有任何想法吗?

4

5 回答 5

80

简单覆盖 onBackPressed 方法:

    @Override
    public void onBackPressed() {
            super.onBackPressed();
            this.finish();
    }
于 2012-02-29T15:15:29.210 回答
43

将此添加到您的活动中

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK))
    {
        finish();
    }
    return super.onKeyDown(keyCode, event);
}
于 2011-01-24T05:06:05.073 回答
14
public boolean onKeyDown(int keycode, KeyEvent event) {
    if (keycode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
    }
    return super.onKeyDown(keycode, event);
}

我的应用程序用上面的代码关闭。

于 2012-05-08T03:35:26.823 回答
8

首先,finish()不会破坏您的进程并释放内存。它只是从活动堆栈中删除活动。您需要终止该过程,该过程会在一堆问题中得到回答(因为这已被多次询问)。

但正确的答案是——不要这样做。Android 操作系统会在需要内存时自动释放内存。通过不释放内存,如果用户回到它,您的应用程序将启动得更快。

在此处查看有关该主题的精彩文章。

于 2011-01-24T05:12:51.313 回答
7

好吧,如果您在这里研究应用程序生命周期如何工作的结构,那么您就会知道onPause()当另一个活动获得焦点时onStop()调用它,并且在该活动不再可见时调用它。

据我所知,您finish()只能从活动和/或具有焦点的活动中调用。如果您finish()从该onPause()方法调用,这意味着您在 Activity 不再处于活动状态时调用它。因此抛出异常。

当您从那时起调用finish()onStop(),活动将被发送到后台,因此将不再可见,然后出现此异常。

当你按下back按钮时,onStop()被调用。

最有可能的是,Android 会自动为您完成您当前想做的事情。

于 2011-01-24T05:09:23.250 回答