当按下“后退”button时如何杀死一个Activity?

我得到一个活动,当它启动时,它从互联网上加载一个图像。 为了节省内存,当活动由后退button被按下时,我希望活动转储所有数据,即删除所有的string和图像。 我想最好的办法就是杀死这个活动。

那么,我似乎无法弄清楚后退button被按下时的callback。 所以,我一直在尝试使用onPause()onStop()callback来完成任务,但是这两种方式都强制closures我的应用程序。 这里是代码:

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

我已经尝试了多种变化,但没有一个似乎工作。 有任何想法吗?

Solutions Collecting From Web of "当按下“后退”button时如何杀死一个Activity?"

添加到您的活动

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

简单覆盖onBackPressed方法:

  @Override public void onBackPressed() { super.onBackPressed(); this.finish(); } 
 public boolean onKeyDown(int keycode, KeyEvent event) { if (keycode == KeyEvent.KEYCODE_BACK) { moveTaskToBack(true); } return super.onKeyDown(keycode, event); } 

我的应用程序closures上面的代码。

首先, finish()不会破坏你的进程并释放内存。 它只是从活动堆栈中删除活动。 你需要杀死这个进程,这个问题在很多问题上都得到了回答(因为这个问题已经有好几次了)。

但正确的答案是 – 不要这样做。 当需要内存时,Android OS将自动释放内存。 通过不释放内存,您的应用程序将启动更快,如果用户回到它。

请在这里看到关于这个话题的精彩文章。

那么,如果研究应用程序生命周期的结构,那么在这里 ,当另一个活动获得焦点时,就会知道onPause()被调用,而当activity不再可见时调用onStop()

从我学到的东西,你可以只从活动和/或焦点活动调用finish() 。 如果您从onPause()方法调用finish() ,这意味着您在活动不再处于活动状态时调用它。 从而引发exception。

当你从onStop()调用finish() ,活动被发送到后台,因此将不再可见,那么这个exception。

当你按下backbutton, onStop()被调用。

Android很可能会自动为您做你正在做的事情。