本系列专题以提炼要点的方式总结知识点,而不作具体展开,对应的会附上我的较喜欢的文章连接供你们详细了解和学习。第一个板块“开发艺术”是对任老师的《Android开发艺术探索》著做的学习和扩展,此书的目录也是该板块的主线,那么就先从咱们熟悉的Activity开始吧~html
一.生命周期全解析android
1.Q:典型状况下Activity生命周期网络
A:post
a.onCreate()
:学习
b.onStart()
:动画
c.onResume()
:3d
d.onPause()
:code
e.onStop()
:cdn
f.onDestroy()
:xml
g.onRestart()
:
onStart()和onResume()、onPause()和onStop()的区别: onStart与onStop是从Activity是否可见这个角度调用的,onResume和onPause是从Activity是否显示在前台这个角度来回调的,在实际使用没其余明显区别。
推荐阅读:对Activity生命周期方法的感性理解
2.Activity生命周期的切换过程
①启动一个Activity:
②打开一个新Activity:
③返回到旧Activity:
④Activity1上弹出对话框Activity2:
⑤关闭屏幕/按Home键:
⑥点亮屏幕/回到前台:
⑦关闭对话框Activity2:
⑧销毁Activity1:
参考文章:实际体验Activity生命周期
3.Q:生命周期的各阶段
A:
a.完整生命周期: Activity在onCreate()和onDestroy()之间所经历的。 在onCreate()中完成各初始化操做,在onDestroy()中释放资源。
b.可见生命周期: Activity在onStart()和onStop()之间所经历的。 活动对于用户是可见的,但仍没法与用户进行交互。
c.前台生命周期: Activity在onResume()和onPause()之间所经历的。 活动可见,且可交互。
4.onSaveInstanceState和onRestoreInstanceState
a.出现时机:异常 状况下Activity 重建,非用户主动去销毁
b.系统异常终止时,调用onSavaInstanceState来保存状态。该方法调用在onStop以前,但和onPause没有时序关系。
onSaveInstanceState与onPause的区别: 前者适用于对临时性状态的保存,然后者适用于对数据的持久化保存。
c.Activity被从新建立时,调用onRestoreInstanceState(该方法在onStart以后),并将onSavaInstanceState保存的Bundle对象做为参数传到onRestoreInstanceState与onCreate方法。
可经过onRestoreInstanceState(Bundle savedInstanceState)和onCreate((Bundle savedInstanceState)来判断Activity是否被重建,并取出数据进行恢复。但须要注意的是,在onCreate取出数据时必定要先判断savedInstanceState是否为空。另外,谷歌更推荐使用onRestoreInstanceState进行数据恢复。
推荐阅读:onSaveInstanceState和onRestoreInstanceState详解
5.Activity异常状况下生命周期分析
a.因为资源相关配置发生改变,致使Activity被杀死和从新建立
例如屏幕发生旋转:当竖屏切换到横屏时,会先调用onSaveInstanceState来保存切换时的数据,接着销毁当前的Activity,而后从新建立一个Activity,再调用onRestoreInstanceState恢复数据。
为了不因为配置改变致使Activity重建,可在AndroidManifest.xml中对应的Activity中设置android:configChanges="orientation|keyboardHidden|screenSize"。此时再次旋转屏幕时,该Activity不会被系统杀死和重建,只会调用onConfigurationChanged。所以,当配置程序须要响应配置改变,指定configChanges属性,重写onConfigurationChanged方法便可。
b.因为系统资源不足,致使优先级低的Activity被回收
①Activity优先级排序:
②当系统内存不足时,会按照Activity优先级从低到高去杀死目标Activity所在的进程。
③若一个进程没有四大组件在执行,那么这个进程将很快被系统杀死。
推荐阅读:异常状况下的生命周期分析
二.Activity四种启动模式
1.Q:设置Activity启动模式的方法
A:
a.在AndroidManifest.xml中给对应的Activity设定属性android:launchMode="standard|singleInstance|single Task|singleTop"。
b.经过标记位设定,方法是intent.addFlags(Intent.xxx)。
2.Q:Activity的四种LaunchMode
A:
a.standard
:标准模式、默认模式
b.singleTop
:栈顶复用模式
c.singleTask
:栈内复用模式
d.singleInstance
:单实例模式
标识Activity任务栈名称的属性:android:taskAffinity,默认为应用包名。
3.经常使用的可设定Activity启动模式的标记位
①FLAG_ACTIVITY_SINGLE_TOP:对应singleTop启动模式。
②FLAG_ACTIVITY_NEW_TASK :对应singleTask模式。
三.IntentFilter匹配规则
原则: ①一个intent只有同时匹配某个Activity的intent-filter中的action、category、data才算彻底匹配,才能启动该Activity。 ② 一个Activity能够有多个 intent-filter,一个 intent只要成功匹配任意一组 intent-filter,就能够启动该Activity。
a. action匹配规则:
b. category匹配规则:
c. data匹配规则:
采用隐式方式启动Activity时,能够用PackageManager的resolveActivity方法或者Intent的resolveActivity方法判断是否有Activity匹配该隐式Intent。
推荐阅读:Intent和IntentFilter
但愿这篇文章对你有帮助~