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

本文分析了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
, activity
onDestroy()调用
android调用activity、activity ondestroy、activity的ondestroy、ondestroy调用时间、ondestroy 未被调用,以便于您获取更多的相关知识。

时间: 2024-12-06 16:31:12

Android编程之Activity中onDestroy()调用分析_Android的相关文章

Android编程之TabWidget选项卡用法实例分析_Android

本文实例讲述了Android编程之TabWidget选项卡用法.分享给大家供大家参考,具体如下: 1 概览 TabWidget与TabHost.tab组件一般包括TabHost和TabWidget.FrameLayout,且TabWidget.FrameLayout属于TabHost. 是否继承TabActivity的问题 实现步骤.两种实现方式,一种是将每个Tab的布局嵌在TabHost中的FrameLayout中,每个Tab的内容布局与显示都在FrameLayout中进行,缺点是布局会显得很

Android编程之listView中checkbox用法实例分析_Android

本文实例讲述了Android编程之listView中checkbox用法.分享给大家供大家参考,具体如下: 我们经常会用到在listView中使用checkbox的情况.直接不回应用后会发现,ListView中的OnItemClickListener事件会和checkbox中的选择事件发生冲突,这个怎么处理呢.直接上代码. list_item.xml代码: <?xml version="1.0" encoding="utf-8"?> <Relati

Android编程之listView中checkbox用法实例分析

本文实例讲述了Android编程之listView中checkbox用法.分享给大家供大家参考,具体如下: 我们经常会用到在listView中使用checkbox的情况.直接不回应用后会发现,ListView中的OnItemClickListener事件会和checkbox中的选择事件发生冲突,这个怎么处理呢.直接上代码. list_item.xml代码: <?xml version="1.0" encoding="utf-8"?> <Relati

Android编程之TabWidget选项卡用法实例分析

本文实例讲述了Android编程之TabWidget选项卡用法.分享给大家供大家参考,具体如下: 1 概览 TabWidget与TabHost.tab组件一般包括TabHost和TabWidget.FrameLayout,且TabWidget.FrameLayout属于TabHost. 是否继承TabActivity的问题 实现步骤.两种实现方式,一种是将每个Tab的布局嵌在TabHost中的FrameLayout中,每个Tab的内容布局与显示都在FrameLayout中进行,缺点是布局会显得很

Android编程之ActionBar Tabs用法实例分析

本文实例讲述了Android编程之ActionBar Tabs用法.分享给大家供大家参考,具体如下: 这里主要实现用Tab切换不同的Fragment,点击View显示or隐藏ActionBar,把ActionBar 设为透明,使界面更加友好,详细代码见资源里的ActionBarTabs. ActionBar Tab主要用于Fragment之间的切换,其必须要设置ActionBar.TabListener,详细代码如下 ActionBarActivity.Java: import android.

Android编程之json解析实例详解_Android

本文实例分析了Android编程之json解析的方法.分享给大家供大家参考,具体如下: JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.

Android编程之include文件的使用方法_Android

本文实例分析了Android编程之include文件的使用方法.分享给大家供大家参考,具体如下: 记得很久以前,听一位大神说,程序员都很懒,不懒惰的程序员不是好程序员,当时不明白什么意思.后来慢慢的懂得了它的意思,好的程序员不要做重复的工作. 我们在android的布局文件中,常会遇到一些相同的布局,每个页面都写,一是比较麻烦,二是一旦有修改还得改多个文件.这个时候我们就可以用到include了. 非常简单的使用,下面看代码 include的文件scollandlisttitle.xml <?x

Android编程之SurfaceView学习示例详解_Android

本文实例讲述了Android编程之SurfaceView学习示例.分享给大家供大家参考,具体如下: SurfaceView是View的子类,使用的方式与任何View所派生的类都是完全相同的,可以像其他View那样应用动画,并把它们放到布局中. SurfaceView封装的Surface支持使用本章前面所描述的所有标准Canvas方法进行绘图,同时也支持完全的OpenGL ES库. 使用OpenGL,你可以再Surface上绘制任何支持的2D或者3D对象,与在2D画布上模拟相同的效果相比,这种方法

Android编程之TextView的字符过滤功能分析_Android

本文实例分析了Android编程之TextView的字符过滤功能.分享给大家供大家参考,具体如下: TextView可以设置接受各式各样的字符,通过过滤指定的字符来满足不同应用的输入和显示要求. 通过xml配置: android:InputType number          接受整数输入 numberSigned    接受有符号整数输入 numberDecimal   接受整数和小数的输入 android:digits 指定接受固定的数字,如android:digits="012345&