Activity猫的一生-故事讲解Activity生命周期
大家好,关于Android中Activity的生命周期,网上大多数文章基本都是直接贴图、翻译API,比较笼统含糊不清。
我就用故事来说一说:
有个人叫User,TA养了几只猫,有只猫叫Activity。User见证了Activity猫的一生。
User想要一只小猫(想用一些功能),于是让一只母猫和一只公猫交配(触摸屏幕打开Activity界面),
之后经过母猫一段时间的孕育(Activity launched),小猫咪出生了(onCreate),取名叫Activity,放在笼子(App)里养。
主人把它抱出来,小猫咪Activity醒来(onStart)睁开眼(onResume),转转头、伸伸爪子、哭闹着要吃东西...(Activity running)。
然后主人喂食、和它玩(用户在Activity上的操作)...
User觉得和Activity一起的时间差不多够了,就(打开新的Activity)把它关进笼子,和其它猫一边玩去了(Another activity comes into the foreground)。
Activity就开始闭目养神(onPause)...
过了一会儿,主人打开笼子,呼唤它的名字(User returns to the activity),它听到后马上睁开眼(onResume)跑过去和主人玩耍(Activity running)...
后来主人又把它关起来然后走了,Activity继续闭目养神(onPause)...
再后来主人把灯关了(The activity is no longer visible),Activity感觉天黑了就睡了(onStop)...
不知道什么时候,主人又回来了,一边敲笼子、一边叫着Activity的名字(User navigates to the activity),
Activity被从美梦中拉回了现实世界,恢复了状态(onRestart),然后醒来(onStart)睁开眼(onResume)...
就这样不知不觉过了很久...
有一次主人(按下主页、多任务或电源按钮)出远门了,好久没回来,家里的食物不够,很快就被大家吃光了(Apps with higher priority need memory)。
由于Activity很弱小(优先级低)、还被关在笼子里(没有绑定前台Service),所以吃到的食物很少。
几顿饥渴后大家都饿昏了,纷纷进入休克状态(App process killed)。
主人回来时看到可怜的Activity一动不动地躺着,怎么都叫不醒,就赶紧送去兽医院抢救(User navigates to the activity)。
医生给它输了血和营养等(系统重新分给内存),经过一段时间后Activity终于复活了,它感觉好像重新从妈妈的肚子里出来一样(onCreate)。
它醒来(onStart)睁开眼(onResume),和主人打打闹闹(Activity running),过了一会儿主人就带着它回家了...
俗话说,大难不死必有后福,之后主人确实对Activity照顾有加。
可是天有不测风云,有一天Activity被一个坏蛋弄死了(The activity is destroyed by the system)。
Activity死了(onDestroy),User很伤心地把它埋了(Activity shut down)...
User很留恋和Activity在一起的时光,心有不甘,于是重新要了一只小猫,名字仍然叫Activity...
Activity一天天长大,主人对它非常宠爱,但它却越来越叛逆。
终于有一天,主人受够了,觉得Activity实在太可恶(或者没有利用价值)就(点击返回按钮)把它抛弃了(The activity is finished)...
Activity不适应外部恶劣的环境很快就死了(onDestroy),大自然用风和泥土把它埋葬(Activity shut down)...
这就是Activity猫的一生。
ZBLibrary提供了isAlive()、isRunning()等判断Activity、Fragment生命周期状态的方法;
以及runUiThread(Runnable runnable)方法来避免直接runOnUiThread(Runnable runnable)导致在onDestroy后运行崩溃;
还有线程管理类ThreadManager,BaseActivity、BaseFragment内可以runThread(String tag, Runnable runnable)很方便地新开线程,
onDestroy后自动释放,不用担心直接new Thread(runnable).start()在onDestroy后还在运行浪费资源,甚至使用被回收的变量导致崩溃等问题。
ZBLibrary-Android快速开发框架
下载试用
下载地址(觉得不错就Star支持下吧^_^)
https://github.com/TommyLemon/Android-ZBLibrary
Activity猫的一生-故事讲解Activity生命周期的更多相关文章
- Activity猫的一生-故事解说Activity生命周期
大家好,关于Android中Activity的生命周期,网上大多数文章基本都是直接贴图.翻译API,比较笼统含糊不清. 我就用故事来说一说: 有个人叫User,TA养了几只猫,有只猫叫Activity ...
- Bean的一生(Bean的生命周期)
1. 什么是Bean? Bean是spring中组成应用程序的主体及由spring IoC容器所管理的对象(IoC容器初始化.装配及管理的对象).如果把spring比作一座大型工厂,那么bean就是该 ...
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...
- Activity Process Task Application 专题讲解
Activity Process Task Application 专题讲解 Activity.和进程 为了阅读方便,将文档转成pdf http://files.cnblogs.com/franksu ...
- Android Activity生命周期及启动模式
曾经搞过许多东西,再熟练的东西一段时间没有碰都会生疏或忘记.后来体会到写成文档记录下来的重要性,但有些word或ppt记录下来的东西随着时间流逝会丢失,或者不愿去看.或许保存成博客的形式,会是更好的选 ...
- Android全面解析之Activity生命周期
前言 很高兴遇见你~ 欢迎阅读我的文章. 关于Activity生命周期的文章,网络上真的很多,有很多的博客也都讲得相当不错,可见Activity的重要性是非常高的.事实上,我猜测每个android开发 ...
- Android Activity生命周期详讲
管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...
- android Activity生命周期(设备旋转、数据恢复等)与启动模式
1.Activity生命周期 接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...
- Android开发--Activity生命周期回顾理解
Activity和Servlet一样,都用了回调机制.我们通过类比servlet来学习Activity.当一个servlet开发出来之后,该servlet运行于Web服务器中.服务器何时创建servl ...
随机推荐
- Ansible_自动化运维《Ansible之初识-1》
1.Ansible简介 1.1 Ansible介绍 Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...
- Java 文件句柄泄露问题解决小记
维护 WebIDE 免不了要管理很多的文件, 自从我们线上系统增加了资源回收功能,便一直受一个问题困扰:后台线程解绑目录时偶尔报错,看症状因为是某些文件被占用了,目录不能解绑.但是由于系统中很多地方都 ...
- 升级到appcompat v7 21.0.2之后遇到的问题解决方法
1)一开始是手动直接覆盖文件到对应的lib project下,提示数个style找不到.原因是新旧版本的文件命名和结构不同,所以这个问题只需要把project目录清空,重新复制文件即可解决. 2)发现 ...
- 在vim中,使用可视化拷贝(剪切)粘贴文本
1 定位光标到你想要开始剪切的位置 2 按v选择字符(按V是选择整行) 3 移动光标到你想要结束剪切的位置 4 按d是为了剪切(按y是为了拷贝) 5 移动光标到你想要粘贴的位置 6 按P是在光标之前 ...
- c#模拟js escape方法(转)
实现URI字符串转化成escape格式的字符 public static string Escape(string s) { StringBuilder sb ...
- 概念 : 用户>角色>权限 的管理(Role-Based Access Control)
RBAC 用户管理规范 概念:每个user有多个accounts,每个account 有一个account binding,有多个roles和多个tasks 举个例子:某个用户现在manager,这是 ...
- 每天一个linux命令(24)--Linux文件类型与扩展名
linux 文件类型和Linux 文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如 file.txt file.tar.gz.这些文件虽然要用不同的程序来打开,但放在Lin ...
- JavaScript基础——兼容性、错误处理
JavaScript基础-错误处理Throw.Try.Catch try语句执行可能出错的代码 catch语句处理捕捉到的错误 throw语句创建自定义错误语句 发生的常见的错误类型 可能是语法错误, ...
- 自定义分页Gridview中Excel导出
先上图,如图所示导出所有查询出的数据 用的是AspNetPager分页控件,这个导出方法,不受分页和gridview列中数据的约束,可以导出您想导出的数据 首先前台页面代码,lblink即为导出exc ...
- synchronized和lock比对
前言:在上面的博客说了synchronized的一些用法,下面我们再来看看lock,这个出现频率也是非常高的一个. 1:获取Lock锁的几种方式 前面说了synchronized有锁对象和锁类对象,当 ...