Android艺术开发探索之Activity的生命周期

目录

Activity的五种生命状态

Activity的生命周期

常见场景的生命周期调用方式

Activity的四种启动模式

如何给Activity指定启动模式

两种方式的区别

IntentFilter的匹配规则

action匹配规则

category匹配规则

data匹配规则


Activity的五种生命状态

1.启动状态

2.运行状态:该状态是可见的,可以与用户进行数据交互的

3.暂停状态:该状态在某些情况下是可见的,但是用户对它的操作没有响应

4.停止状态:该状态下是不可见的,当系统内存不足时,该状态下的Activity很容易被销毁

5.销毁状态

Activity的生命周期

OnCreate():Activity刚开始创建时,生命周期的第一个方法

OnStart():Activity在启动时,此时的界面还是不可见的,还无法与用户进行交互

OnCreate() 和 OnStart()方法一般用来加载布局

OnResume():第一次Activity启动完毕或者是Activity由暂停状态(OnPause状态)重新回到当前Activity。

OnResume()方法一般用来做数据恢复和展示

OnPause():Activity暂停时,此时的界面仍可见。

OnPause()方法一般是用来做数据存储、停止动画、注销广播等,但是不能做耗时操作(我在后面会讲为什么不能)

OnStop():Activity不在UI最顶层或者说该界面完全不可见。

OnStop()方法一般用来做回收工作和资源的释放

OnRestart():Activity由OnStop状态恢复到UI的最顶层。

OnRestart()用来做数据恢复

OnDestory():Activity被销毁

OnDestoy()用来做回收工作和资源释放

常见场景的生命周期调用方式

1.启动一个Activity ,会执行OnCreate()->OnStart()->OnResume()

2.销毁一个Activity,会执行OnPause()->OnStop()->OnDestory()

3.由ActivityA跳转到ActivityB,会执行OnPause()->OnCreate()->OnStart()->OnResume()->OnStop()

4.点击back键回退时,会执行OnPause()->OnStop()->OnDestory()

5.再次回到原Activity时,会执行OnRestart()->OnStart()->OnResume()

6.点击home键时,会执行OnPause()->OnStop()方法,当重新进入是会执行OnStart()->OnResume(),因此想关闭声音等操作我们一般是放在OnPause()->OnStop()方法中,恢复数据信息是放在OnStart()->OnResume()中

7.资源发生变化时(比如发生手机横屏切换竖屏等)OnSaveInstanceState()(用来保存当前状态的一些信息)->OnPause()->OnStop()->OnDestory() 当重新被创建时 会执行OnCreate()->OnStart()->OnRestoreInstanceState()(恢复数据)->OnResume()

面试题:两个Activity之间跳转时必然会执行的是哪几个方法? 答:当在A Activity里面激活B Activity的时候, A会调用onPause()方法,然后B调用onCreate() ,onStart(), onResume()。 这个时候B覆盖了A的窗体, A会调用onStop()方法。 如果B是个透明的窗口,或者是对话框的样式, 就不会调用A的onStop()方法。 如果B已经存在于Activity栈中,B就不会调用onCreate()方法。 故一定会执行A的onPause()和B的onStart()与onResume()。

Activity的四种启动模式

standard:标准模式,也是系统的默认模式。每次启动一个Activity都会创建一个新的Activity

singleTop:栈顶复用模式,在创建Activity之前如果新的Activity在栈顶,那么这个Activity就不会被创建,只会回调onNewIntent方法,如果该Activity不在栈顶就会重新创建实例。

singleTask:栈内复用模式,当创建一个新的Activity A时,系统首先会去寻找是否存在A想要的任务栈,如果不存在,就会重新创建一个任务栈,然后创建A实例后把A放到栈中。如果存在A所需的任务栈,再看栈中是否有实例存在,如果存在,就会将A上面的所有对象出栈,直到A位与栈顶,如果不存在,则会实例化一个A放入栈顶。

singleInstance:单实例模式,具有singleTask模式的所有特性,具有此种模式的Activity只能单独的位于一个任务栈中。

如何给Activity指定启动模式

一共有两种方式

1.通过AndroidMenifest为Avtivity指定启动模式

android:launchMode="standard"

2.通过Intent中设置标志位来为Activity指定启动模式

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

两种方式的区别

在优先级上第二种方式高于第一种方式,当两种同时存在是,以第二种为准。

第二种方式无法为Activity指定singleInstance模式,而第一种方式无法直接为Activity设置FLAG_ACTTIVITY_CLEAR_TOP标识。

IntentFilter的匹配规则

显示调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息,如果不匹配将无法启动目标Activity。

IntentFilter中过滤信息有action、category、data。为了匹配过滤列表,需要同时匹配过滤列表中的action、category、data信息。

action匹配规则

Intent中的action存在且必须和过滤规则中的其中一个action相同,Intent中如果没有指定action,那么匹配失败。action区分大小写。

category匹配规则

Intent中的category可以没有,但是存在时必须能和过滤规则当中的某一个相同。category不区分大小写。

data匹配规则

data由两部分组成,mimeType和URI。

mineType指的是媒体类型,比如image/jpeg,audio/mpeg4-generic和video/*等,可以表示图片、文本、视频等不同的媒体格式。

URI:包含比较多的内容

Scheme:URI的模式,比如http、file、content等,如果URI没有指定scheme,那么整个URI的其他参数无效,意味着URI也是无效的。

Host:URI的主机名,比如www.baidu.com,如果host未指定,那么整个URI的其他参数无效,意味着URI也是无效的。

Port:URI的端口号,比如80,仅当URI中的scheme和host都指定时port参数才是有意义的。

Path:表示完整路径

pathPattern:表示完整路径,但是路径里面可以包含通配符

pathPrefix:表示路径的前缀信息

Intent中的data存在且必须和过滤规则中的其中一个data相同

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值