说到Activity的onDestroy,对所有的Android开发者都很熟悉,但是不一定都知道里面存在着一些坑,分享给大家,以后踩中的时候可以应急

用Activity的时候,会发现如下问题:

  有时候会发现Activity的onDestroy方法回调比较缓慢(可以达到好几秒钟之后才调用),即使之前使用finish方式关闭Activity也一样

onDestroy回调慢带来什么问题呢?

  有可能再次打开Activity的时候,都走完了onCreate,onResume之后上一次的onDestroy方法才被调用,想想如果在onResume和

onDestroy中共同维护了一个变量(isActivityShowing --> Activity是否正在显示),这个时候这个状态就错了。

解决方法与建议

  所以建议不要在Activity的onDestroy方法中做有关于数据存储,状态维护的事情,回收资源也最好不要完全依赖这个方法,可以用下面的方式

比较靠谱的解决方式

    private boolean isDestroyed = false;

    private void destroy()  {
if (isDestroyed) {
return;
}
// 回收资源
     isDestroyed = true;
    }

    @Override
protected void onPause() {
super.onPause();
if (isFinishing()) {
destroy();
}
} @Override
public void onDestroy() {
destroy();
}
试了一下,只有走回收流程的时候(返回键)的那种onPause,isFinishing才为true

普通的切到后台或者另外一个Activity盖上来的是那个isFinishing是false

参考了另外一篇文章:http://blog.csdn.net/z1074971432/article/details/10517449

Activity onDestroy() 回调缓慢问题分析及完美解决方案的更多相关文章

  1. Activity启动过程源码分析(Android 8.0)

    Activity启动过程源码分析 本文来Activity的启动流程,一般我们都是通过startActivity或startActivityForResult来启动目标activity,那么我们就由此出 ...

  2. ecshop之transport和jquery冲突之完美解决方案

    众所周知:ecshop的transport.js文件和Jquery是冲突的,两个文件不能同时调用,现给出以下完美解决方案:原因分析:在transport.js文件中,大概 580行到590行之间,这个 ...

  3. Xcode6.1标准Framework静态库制作方法。工程转Framework,静态库加xib和图片。完美解决方案。

    http://www.cocoachina.com/bbs/read.php?tid-282490.html Xcode6.1标准Framework静态库制作方法.工程转Framework,静态库加x ...

  4. 推荐图书-《SQL Server 2008商业智能完美解决方案》

    内容简介 <SQL Server 2008商业智能完美解决方案>介绍如何使用Microsoft SQL Server 2008开发商业智能(BI)解决方案.<SQL Server 2 ...

  5. Nginx 502/504 Gateway time-out错误完美解决方案【转发】

      在安装完Nginx+PHP-fpm+Mysql后,跑PHP的应用会经常出现504 Gateway Time-out 或者502 Bad Gateway的情况. Nginx 504 Gateway ...

  6. DLL导出类避免地狱问题的完美解决方案

    DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序.作为一名面向对象的程序员,希望DLL可以导出类, ...

  7. Android适配底部返回键等虚拟键盘的完美解决方案

    这个问题来来回回困扰了我很久,一直没能妥善解决. 场景1:华为手机遮挡了屏幕底部. 场景2:进入应用时,虚拟键自动缩回,留下空白区域. 需求: 需要安卓能自适应底部虚拟按键,用户隐藏虚拟按键时应用要占 ...

  8. ORA-03113:通信通道的文件结尾-完美解决方案

    ORA-03113:通信通道的文件结尾-完美解决方案   oracle 文档中对这个错误这样解释: ORA-03113 错误就是说连接到数据库的网络中断了.有些错误由于频繁出现.原因复杂而被 Orac ...

  9. Android 适配底部返回键等虚拟键盘的完美解决方案

    这个问题来来回回困扰了我很久,一直没能妥善解决. 场景1:华为手机遮挡了屏幕底部. 场景2:进入应用时,虚拟键自动缩回,留下空白区域. 需求: 需要安卓能自适应底部虚拟按键,用户隐藏虚拟按键时应用要占 ...

随机推荐

  1. 归并求逆序数(逆序对数) && 线段树求逆序数

    Brainman Time Limit: 1000 MS Memory Limit: 30000 KB 64-bit integer IO format: %I64d , %I64u   Java c ...

  2. Java 对象内存占用

    java基本类型及对象占用的内存大小 请参考下面文章 原始类型及对象占用的内存大小 http://www.javamex.com/tutorials/memory/object_memory_usag ...

  3. UML-用例图

    用例图是指由参与者.用例以及它们之间的关系构成的用于描述系统功能的视图.用例图是被称为参与者的外部用户所能观察到的系统功能的模型图,呈现了一些参与者和一些用例,以及它们之间的关系,主要用于对系统.子系 ...

  4. UWP的一种下拉刷新实现

    简介 我们最近实现了一个在UWP中使用的下拉刷新功能,以满足用户的需求,因为这是下拉刷新是一种常见的操作方式,而UWP本身并不提供这一机制. 通过下拉刷新这一机制,可以让移动端的界面设计变得更加简单, ...

  5. 如何开始DDD(完)

    连续写了两篇文章,这一篇我想是序的完结篇了.结合用户注册的例子再将他简单丰富一下.在这里只添加一个简单需求,就是用户注册成功后给用户发一封邮件.补充一下之前的代码 public class Domai ...

  6. AWS系列之三 使用EBS

    Amazon Elastic Block Store(EBS)可作为EC2实例的持久性数据块级存储.其具有高可用性和持久性的特点,可用性高达99.999%.给现有的EC2实例扩展新的存储块只需要几分钟 ...

  7. 实践基于Task的异步模式

    Await 返回该系列目录<基于Task的异步模式--全面介绍> 在API级别,实现没有阻塞的等待的方法是提供callback(回调函数).对于Tasks来说,这是通过像ContinueW ...

  8. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  9. Java Spring-Spring与Quartz整合

    关于spring mvc.mybatis.maven的整合,请看上一篇文章 Quartz是一个强大的可以在web端执行定时任务的jar包. 本篇文章分为两大不同配置,第一位xml配置,第二位注解配置 ...

  10. 每天一个linux命令(52):ifconfig命令

    许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改.Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config).通常需 ...