按下“后退”按钮时如何终止活动?

时间:2011-01-24 04:50:19

标签: android button android-activity kill back

我有一个活动,当它启动时,它从互联网加载图像。为了节省内存,当按下后退按钮留下Activity时,我希望活动转储所有数据,即删除其中的所有字符串和图像。我认为最好的方法是杀死活动。

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

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

我尝试过多种变体,但似乎都没有。有任何想法吗?

5 个答案:

答案 0 :(得分:67)

简单覆盖onBackPressed方法:

    @Override
    public void onBackPressed() {
            super.onBackPressed();
            this.finish();
    }

答案 1 :(得分:39)

将此添加到您的活动中

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK))
    {
        finish();
    }
    return super.onKeyDown(keyCode, event);
}

答案 2 :(得分:13)

public boolean onKeyDown(int keycode, KeyEvent event) {
    if (keycode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
    }
    return super.onKeyDown(keycode, event);
}

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

答案 3 :(得分:7)

首先,finish()不会破坏您的进程并释放内存。它只是从活动堆栈中删除活动。你需要杀死这个过程,这个过程会在一堆问题中得到解答(因为这被问了好几次)。

但正确答案是 - 不要这样做。 Android OS会在需要内存时自动释放内存。通过不释放内存,如果用户重新启动,您的应用程序将启动得更快。

see here对该主题进行精彩的撰写。

答案 4 :(得分:5)

好吧,如果你研究应用程序生命周期的工作结构here,那么你就会知道当另一个活动获得焦点时调用onPause(),{{1当活动不再可见时调用。

根据我所学到的,你只能从活跃和/或有焦点的活动中呼叫onStop()。如果您从finish()方法调用finish(),则表示您在活动不再有效时调用它。因此抛出异常。

当您从onPause()拨打finish()时,活动将被发送到后台,因此将不再可见,然后是此例外。

onStop()按钮时,会调用back

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