Activity猫的一生-故事解说Activity生命周期

时间:2021-01-24 01:10:54

大家好,关于Android中Activity的生命周期,网上大多数文章基本都是直接贴图、翻译API,比较笼统含糊不清。

Activity猫的一生-故事解说Activity生命周期

我就用故事来说一说:

有个人叫User,TA养了几只猫,有只猫叫Activity。User见证了Activity猫的一生。

Activity猫的一生-故事解说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快速开发框架

Activity猫的一生-故事解说Activity生命周期

下载试用

ZBLibraryDemoApp.apk

下载地址(觉得不错就Star支持下吧^_^)

https://github.com/TommyLemon/Android-ZBLibrary

Activity猫的一生-故事解说Activity生命周期的更多相关文章

  1. Activity猫的一生-故事讲解Activity生命周期

    大家好,关于Android中Activity的生命周期,网上大多数文章基本都是直接贴图.翻译API,比较笼统含糊不清. 我就用故事来说一说: 有个人叫User,TA养了几只猫,有只猫叫Activity ...

  2. Bean的一生(Bean的生命周期)

    1. 什么是Bean? Bean是spring中组成应用程序的主体及由spring IoC容器所管理的对象(IoC容器初始化.装配及管理的对象).如果把spring比作一座大型工厂,那么bean就是该 ...

  3. Android Activity生命周期详讲

    管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...

  4. android Activity生命周期(设备旋转、数据恢复等)与启动模式

    1.Activity生命周期     接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...

  5. Android开发--Activity生命周期回顾理解

    Activity和Servlet一样,都用了回调机制.我们通过类比servlet来学习Activity.当一个servlet开发出来之后,该servlet运行于Web服务器中.服务器何时创建servl ...

  6. 一句话、一张图记住Activity和Fragment之间错综复杂的生命周期关系

    如果我们在Fragment和它的宿主Activity的生命周期中都加上Log日志,你能顺利写出他们的执行顺序吗?我们先来看一张Google官方的图片: 咋一听,Activity生命周期有七个方法,Fr ...

  7. Android开发艺术探索(一)——Activity的生命周期和启动模式

    Activity的生命周期和启动模式 生命周期有? 1.典型情况下的生命周期—>指有用户参与的情况下,Activity所经过的生命周期改变 2.异常情况下的生命周期—>指Activity被 ...

  8. Activity完整的生命周期

    首语:群里看到一位网友说:你能说出Activity的完整生命周期吗?看到这句话,我也在反思自己,我也是个fresh,所以想找个时间仔细的扒一扒Activity生命周期. 首先拿一张简单而又复杂的生命周 ...

  9. Activity的生命周期与加载模式——Activity的生命周期演示

    当Activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理.当前活动的Activity位于栈顶.随着不同应用的运行,每个Activity都有可能从活动 ...

随机推荐

  1. Codeforces 546E Soldier and Traveling(最大流)

    题目大概说一张无向图,各个结点初始有ai人,现在每个人可以选择停留在原地或者移动到相邻的结点,问能否使各个结点的人数变为bi人. 如此建容量网络: 图上各个结点拆成两点i.i' 源点向i点连容量ai的 ...

  2. 如何使用Git——(一)

    一.git与github git 是一款*和开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目. github 是一个网站,给用户提供git仓库托管服务,是开源代码库以及版本控制系统.在 ...

  3. BeanFactory学习

    关于BeanFactory,一个相对易懂的博客,关于深入的理解,后续继续学习 http://www.cnblogs.com/liuling/archive/2013/04/14/BeanFactory ...

  4. Python中的基本数据类型的区别

    set集合和dict字典的区别 唯一区别: set没有对应的value值 相同点: 都无索引,不可进行切片和根据索引进行的操作 两者都是不可哈希的可变类型 两者的内部元素是可哈希的不可变类型 利用哈希 ...

  5. 外显子分析报错解决方案bin field of BAM record does not equal value computed based on alignment start and end, and length of sequence to which read is aligned

    以下链接给出了解决方案:https://gatkforums.broadinstitute.org/gatk/discussion/4290/sam-bin-field-error-for-the-g ...

  6. SpringMVC之数据绑定

    SpringMVC之数据绑定 #数据绑定:Spring MVC会根据客户端请求参数的不同,将请求信息以一定的方式转换并绑定 到控制器类中的方法参数上. #说明:这里的“以一定的方式”应该指的是什么?过 ...

  7. 数据库历险记(二) | Redis 和 Mecached 到底哪个好?

    文章首发于微信公众号「陈树义」,专注于 Java 技术分享的社区.点击链接扫描二维码,与500位小伙伴一起共同进步.微信公众号二维码 http://p3npq6ecr.bkt.clouddn.com/ ...

  8. 【Spring Boot&&Spring Cloud系列】Spring Boot中使用NoSql数据库Redis

    github地址:https://github.com/AndyFlower/Spring-Boot-Learn/tree/master/spring-boot-nosql-redis 一.加入依赖到 ...

  9. Java之集合(三)ArrayList

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7291339.html 1.前言 本章介绍List中最常用的一个类--ArrayList.在第一章中已经介绍了Li ...

  10. 用c写一个小的聊天室程序

    1.聊天室程序——客户端 客户端我也用了select进行I/O复用,同时监控是否有来自socket的消息和标准输入,近似可以完成对键盘的中断使用. 其中select的监控里,STDOUT和STDIN是 ...