Activity的生命周期和启动模式

Activity的声明周期

讲述了Activity正常生命周期和异常生命周期各个周期的调用。以下知识点:

1.在异常情况下,Activity的onStart这些可能不会调用。而系统会调用onsaveInstanceState,这时我们需要在这个方法内实现我们数据保存。当Activity再次被启动的时候会去调用OnRetoreInstanceState,我们可以在这个方法里进行恢复数据。

(1)系统配置发生变化,会引起Activity的异常的关闭。

例如:横竖屏切换,这个情况下是LayoutDirrction发生变化。

FontScale,ScreenSize, keyboardHidden, locale。

同时我也可以通过在AndroidMainfest文件Activity声明,在configChanges添加对应变化原因,当这个变化发生后,这是不会创建新得Activiy,而是会调用旧的Activity,这时会调用onNewIntent方法。

(2)内存不足时后台Activity会被销毁。

优先级是:前台Activity > 显示而无交互的Activity(被dialog覆盖的) > 不显示完全处于后台的Activity。

注:如果一个进程中没有四大主件在运行,这个进程很快会被系统杀掉。因此一些后台工作不适合脱离四大组件而独自运行在后台中,这样很容易被系统杀死。比较好的方法是将后天的工作放在Service中从而保证进程有一定的优先级,这样就不会轻易的被系统杀死。

 

Activity的启动模式

1.standard 标准的启动方式,也是默认的启动方式。这种方式会创建一个activity并且压入栈。不管任务栈中是否已经存在。(任务栈默认是包名,也就是一般情况下是一个应用两个栈,一个是launcher,一个对应包名的)。

2.singleTop:栈顶复用模式。这种模式启动的activity是如果Activity已经处于栈顶,就不会重新创建,只是会调用onNewIntent。如果不处于栈顶,则会重新创建。

3.singleTask:站内复用模式。这种系统会先寻找该activity的所需要的栈,如果没有找到就给它独立创建一个栈并入栈。如果找到栈,该栈中又没有该Activity的实例,系统就回直接创建一个实例压入栈。如果栈中已经存在该Activity,就会将该Activity上面所有的Activity出栈然后处于栈顶。

4.singleInstance: 单实例模式。这个模式是加强的singleTask, 系统会直接创建一个单独的栈,并且栈内只能有这一个Activity。由于栈内复用,再次启动该activity不会再创建新的activity,除非该栈被系统销毁。

注:根据不同的模式进行不同的场景编码。可以adb shell dumpsys activity查看系统activity情况(处于哪个栈,栈内有哪些实例等等)。

 

IntentFilter匹配规则

Activity分为显性和隐形调用,先行调用就是平常使用的方式。隐性调用是使用IntentFilter的匹配规则找到相应的Activity进行调用。

Action:再Acvity的注册时添加action,在启动时只需传入注册时添加的任一action的值就可以进行启动activity.

category:与action不同的是,可以不用显式传入category就可以启动。因为在使用startActivity或startActivityForResult的时候会默认加上“android.intent.categeory,DEFAULT”。多见于MainActivity。

还有一点与Action不同的是,当mainfest文件中声明了category,在startActivity是传入的category必须与mainifest注册是的每一个都相同。

date:规则类似于action,但是用于匹配的数据要按照data数据结构及进行设置。

注:入口MainActivity必须设置 action = android.intent.action.MAIN和android.intent.categeory,DEFAULT。这二者共同用来表明一个入口Activity,这个二者缺一都不具有实际意义,都无法出现在系统的应用列表中。对于Service, BroadcastReceiver,PackageManager同样提供类似queryIntentActivitys和resolveActivity去获取成功匹配的组件信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值