这里写一个准备一个关闭所有Activity的ActivityCollector
Activity的isFinishing()判断Activity的状态

public class ActivityCollector {private static List<Activity> activities = new ArrayList<Activity>();public static void addActivity(Activity activity) {activities.add(activity);}public static void removeActivity(Activity activity) {activities.remove(activity);}public static void finishAll() {for (Activity activity : activities) {if (!activity.isFinishing()) {activity.finish();}}}
}

这个.finish()和.isFinishing()?

在Activity中调用finish()或按返回键退出时,若有资源被其他对象引用不能释放(如context被某个单例对象引用或正在线程中被使用),则activity不会被调用onDestory()方法。

isFinishing() 可用来判断Activity是否处于活跃状态(false)还是等待回收状态(true)。

只有onDestroy()方法被调用后它才返回true

关于onDestory()的调用:

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

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

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

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

网上找到的解决方法:

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

Activity的isFinishing()判断Activity的状态相关推荐

  1. Activity 的 isFinishing()、isDestroy() 分析

    结论: isFinishing() 用于判断 Activity 是否正在 finish. isDestroy() 用于判断 Activity 是否已经 destroy. isFinishing() 返 ...

  2. Activity 的 isFinishing()、isDestroy()

    结论: isFinishing() 用于判断 Activity 是否正在 finish. isDestroy() 用于判断 Activity 是否已经 destroy. isFinishing() 返 ...

  3. android 进程被回收,Android开发进阶:Activity和进程的回收和状态恢复

    不管是安卓的官方文档还是源码注释,处处可见"从 Activity A 跳到 Activity B,当系统内存不足时 A 可能会被回收--",而且没有明确说明 A 和 B 是否属于同 ...

  4. Activity生命周期的三种状态

    生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停止状态.接下来将 ...

  5. 什么是生命周期?Activity生命周期的三种状态

    什么是生命周期 生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期.同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态.暂停状态和停 ...

  6. android activity 回调函数,Android Activity的生命周期

    Activity的生命周期 Android系统根据activity的所处不同阶段对应的唤起其特定的回调函数来执行代码.activity的一系列有序的生命周期回调函数.本文将来讨论下activity各阶 ...

  7. android中判断sim卡状态和读取联系人资料的方法

    在写程序中,有时候可能需要获取sim卡中的一些联系人资料.在获取sim卡联系人前,我们一般会先判断sim卡状态,找到sim卡后再获取它的资料,如下代码我们可以读取sim卡中的联系人的一些信息. 读取的 ...

  8. android基础 [超级详细android Activity组件解析(Activity综述,Activity生命周期,Activity启动--携带参数启动)]

    1 章节目录 2 Android Activity综述 2.1 Activity怎么用 2.2 layout - 界面布局 2.3 Java - 控制界面 2.4 AndroidManifest.xm ...

  9. android判断app前后台状态

    项目中需要在应用从后台切换到前台时做操作,自己实现了功能,但对这块的机制不太了解,So.找了相关的资料来学习总结下. !!! 部分资料来源https://github.com/wenmingvs/An ...

最新文章

  1. 毕业仅1年,干Python赚了50W 网友:不是吹的
  2. 【MySQL】Dockerfile书写简单示例
  3. UITextField总结--博主总结的真好
  4. 怎么样做一个漂亮女人
  5. 中国各类基金资助项目英文翻译(中英文对照)
  6. 怎么写ERP实施方案?
  7. C++内存管理——指针数组
  8. 计算机在社区健康档案管理中的作用,某社区卫生中心对辖区居民的健康档案信息进行电子化。一直建档居民的年龄范围在1..._考试资料网...
  9. android mkdirs 不起作用,Android mkdirs()创建一个零字节文件而不是文件夹
  10. Unity 和腾讯游戏成立联合创新实验室:从技术创新探索游戏产品新模式和概念
  11. 创建ubuntu根文件系统
  12. 为您详细比较三个 CSS 预处理器(框架):Sass、LESS 和 Stylus
  13. 多元统计分析-联合分析
  14. 数据分析案例——航空公司客户价值分析
  15. 【LeetCode-13】-罗马数字
  16. 在一夜暴富之前,我先一夜秃了头
  17. binomial检验_SPSS中八类常用非参数检验之二:二项分布(Binomial)检验
  18. 各种说明方法的例句_11个说明方法句子
  19. android的视频直播,Android进行视频,直播播放
  20. 在VS中给源文件用文件夹分类/在VS中变更源文件路径

热门文章

  1. 2022最新SpringCloud Alibaba入门到精通超详细版文档,教你从0到1搭建一个微服务项目
  2. 无人机集群飞行控制思考
  3. html英文读法,48个英语音标发音表
  4. 自学英语的手机软件哪个好,负基础
  5. Electron 分享(入门,安装,打包)
  6. github找android源码,从github检查Android源代码
  7. W ndows10里安装Windows7,教你怎样把win10系统重装成win7
  8. Spring------基于xml的DI (一)设值注入、构造注入
  9. ubuntu1404 安装php5.6-fpm
  10. 全国各地出现巨坑,2012世界末日大预言