我有一个活动,当它启动时,它从互联网加载图像。为了节省内存,当按下后退按钮留下Activity时,我希望活动转储所有数据,即删除其中的所有字符串和图像。我认为最好的方法是杀死活动。
好吧,我似乎无法弄清楚按下后退按钮时的回调。所以,我一直在尝试使用onPause()
和onStop()
回调来执行任务,但这两种方式都会强行关闭我的应用。这是代码:
public void onPause() {
this.finish();
}
public void onStop() {
finish();
}
我尝试过多种变体,但似乎都没有。有任何想法吗?
答案 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会自动为您提供您当前想要做的事情。