Android编程之Activity中onDestroy()调用分析

 更新时间:2015年12月16日 15:34:15   作者:天使之翼  
这篇文章主要介绍了Android编程之Activity中onDestroy()调用方法,针对onDestroy引起的内存泄露及解决方法进行了分析,并给出了解决方案,需要的朋友可以参考下

本文分析了Android编程之Activity中onDestroy()调用方法。分享给大家供大家参考,具体如下:

刚刚一个BUG让我发现,如果 activity 实现了一个回调接口,然后使用 this 设置给需要回调接口的方法,这种应用场景比较常见,最常见的就是实现 onClickListener 接口,然后 findViewById().setOnClickListenr(this)

如果,这个回调接口设置到了一个静态对象(单例模式),当 activity finish() 的时候(按返回键,回到桌面),则activity 不会被调用 onDestroy() ,原因可能是 activity 对象还在被引用!

此时你再点击图标回到应用,onCreate() 再次调用!

很明显,如果你把资源释放放在了 onDestroy() 里面,就会导致内存泄露

那有没有解决办法呢?有的

你可以在 onPause() 方法里面判断 isFinishing() ,正常调用 finish() 后 activity 的回调过程是 onPause、onStop、onDestroy ,倘若出现上面的情况,只到 onPause!但是 isFinishing() 标志还是为 true !你可以释放资源了。

我们来看下  onDestroy 的官方解释:

protected void onDestroy () 
Added in API level 1 
Perform any final cleanup before an activity is destroyed. This can happen either because the activity is finishing (someone called finish() on it, or because the system is temporarily destroying this instance of the activity to save space. You can distinguish between these two scenarios with the isFinishing() method. 
Note: do not count on this method being called as a place for saving data! For example, if an activity is editing data in a content provider, those edits should be committed in either onPause() or onSaveInstanceState(Bundle), not here. This method is usually implemented to free resources like threads that are associated with an activity, so that a destroyed activity does not leave such things around while the rest of its application is still running. There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it, so it should not be used to do things that are intended to remain around after the process goes away. 
Derived classes must call through to the super class's implementation of this method. If they do not, an exception will be thrown. 

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • Android Studio配合WampServer完成本地Web服务器访问的问题

    Android Studio配合WampServer完成本地Web服务器访问的问题

    这篇文章主要介绍了Android Studio配合WampServer完成本地Web服务器访问,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 基于Flutter实现风车加载组件的制作

    基于Flutter实现风车加载组件的制作

    Flutter官方提供了诸如 CircularProgressIndicator和 LinearProgressIndicator两种常见的加载指示组件,但是说实话,实在太普通,所以本文将用Flutter自定义一个风车加载组件,需要的可以参考一下
    2022-03-03
  • Android实现上拉吸顶效果

    Android实现上拉吸顶效果

    这篇文章主要为大家详细介绍了Android实现上拉吸顶效果,上滑标题固定在顶部,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • android自定义Camera实现录像和拍照

    android自定义Camera实现录像和拍照

    这篇文章主要为大家详细介绍了android自定义Camera实现录像和拍照功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android中PathMeasure仿支付宝支付动画

    Android中PathMeasure仿支付宝支付动画

    这篇文章主要为大家详细介绍了Android中PathMeasure仿支付宝支付动画,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • android开发之蜂鸣提示音和震动提示的实现原理与参考代码

    android开发之蜂鸣提示音和震动提示的实现原理与参考代码

    蜂鸣提示音和震动提示此功能在手机使用中很实用,最近在读zxing项目,学到了不少东西;我们一起来看看他是怎么做的,感兴趣的朋友可以了解下哦
    2013-01-01
  • Android使用ViewPager实现导航

    Android使用ViewPager实现导航

    本文主要介绍了Android使用ViewPager实现导航的方法代码。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Flutter 剪裁组件的使用

    Flutter 剪裁组件的使用

    今天我们主要聊聊 Flutter 中的几个剪裁组件的使用,也是项目当中经常可以用到的,希望你可以有所收获
    2021-06-06
  • 详解android环境下的即时通讯

    详解android环境下的即时通讯

    这篇文章主要介绍了详解android环境下的即时通讯,具有一定的参考价值,有兴趣的可以了解一下。
    2016-12-12
  • RecyclerView实现拖拽排序效果

    RecyclerView实现拖拽排序效果

    这篇文章主要为大家详细介绍了RecyclerView实现拖拽排序效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06

最新评论