回顾基础知识--第一章:Activity的生命周期和启动模式

来源:互联网 发布:java中final和static 编辑:程序博客网 时间:2024/05/20 15:41
最近在读任玉刚的Android开发艺术探索,为了方便之后复习,下面做一下笔记.

对于Activity的生命周期相信知道安卓的最熟悉不过了,但是,我还是有了新的认识.之前,认为在onResume()时Activity才是可见的,其实不是,在onStart()就已经可见了,只是在后台而已,在onStop()后Activity才不可见.关于这个周期的划分,大家可以参考这篇博客:

Android之Activity,Fragment生命周期探知,这篇博客写的很详细,我主要分析一下Activity的启动模式.

Activity的启动模式一共四种:standard,singleTop,singleTask,singleInstance.根据我自己的理解阐述一下.

1)standard:标准模式,就是只要开启就创建一个新的实例,系统默认是这样的形式,所以这个模式可能在任务栈中有多个,比较明显的就是点击返回按钮会看到多次

2)singleTop:栈顶复用模式,如果我们要开启的activity位于栈顶,我们将复用这个Activity,他的onCreate(),onStart()将不会被调用.

3)singleTask:栈内复用模式,这个让我有了新的认识,这种模式的activity有自己指向的任务栈,

如果这个任务栈S存在,需要在看这个实例A是否存在,

如果不存在直接创建A;

如果存在就调用onNewIntent()方法,而且会把其上面的activity给请出栈.BACD变成BA.

如果这个任务栈S不存在,我们要先创建任务栈S,之后在创建实例A添加到任务栈S中.

4)singleInstance:单实例模式,这个模式更霸道,自己单独一个栈,存放activity,也就是只要任务栈没有被系统销毁,我们就无需创建Activity.

我们可以使用dumpsys命令:adb shell dumpsys acitivity命令查看activity的任务栈信息.intent和Manifest都可以设置启动模式,但是manifest不能直接给Activity设置FLAG_ACTIVITY_CLEAR_TOP,需要搭配FlAG_ACTIVITY_TASK一起设置,相当于singleTask模式.而intent也无法为activity设置singleInstance模式.

还有就是显示意图和隐式意图,隐式意图在manifest文件中配置,我们通过设置action,category,data与manifest文件进行匹配.如果manifest文件中三个属性都设置了,那么我们在Intent中就必须设置action和data,category可有可无,不过如果有的话,category中的每一个配置必须可以再manifest找到.而action和data只要有和manifest中的一直的就可以.这是我理解的,还需要敲一下代码验证一下.

data中的mimeType和URI对于这个概念之前有点模糊,现在印象更深了.mimeType是媒体类型,uri和我们方位的网址差不多,有主机名,端口号等等.uri默认的是content和file.感觉有点像抄书,不过这些是自己理解的,还比较浅显,之后要自己敲代码验证一下

阅读全文
0 0
原创粉丝点击