ondestroy不总是被称为?

时间:2013-10-26 16:20:12

标签: android ondestroy

我在我的活动onDestroy中添加了一些缓存清理代码,但大部分时间代码都没有执行,除非我通过finish()明确完成了活动。

编辑:只需使用onDestroy或系统资源不足,即可阅读finish()。那么我需要在哪里放置缓存清理代码?如果我将其放入onPause()并且用户返回应用程序,则清除缓存。我实际上是将重要的临时文件存储在缓存中,不应该在onPause中删除。

3 个答案:

答案 0 :(得分:12)

来自Android开发者documentation

  

protected void onDestroy()

     

在API级别1中添加在活动开始之前执行任何最终清理   销毁。这可能是因为活动正在结束   (有人称之为完成(),或者系统是暂时的   销毁此活动实例以节省空间。您可以   使用isFinishing()方法区分这两种情况。

     

注意:不要指望这种方法被称为作为保存的地方   数据!例如,如果活动正在编辑内容中的数据   提供者,这些编辑应该在onPause()或   onSaveInstanceState(Bundle),不在这里。这种方法通常是   实现释放资源,如与线程相关联的线程   活动,以便被破坏的活动不会留下这样的东西   当其余的应用程序仍在运行时。有   系统将简单地杀死活动的托管的情况   进程中没有调用此方法(或任何其他方法),所以它   不应该被用来做那些打算留下来的东西   过程消失后。

您可以将代码移至onPause()onStop()

答案 1 :(得分:3)

尝试使用onstop

像这样

@Override
    protected void onStop() {
        super.onStop();
       //write your code here
    }

答案 2 :(得分:1)

ondestroy主要在系统从内存中完全删除活动时调用,或者当用户杀死活动时,您希望在暂停时保存数据,因为在销毁之前总是会调用它。