新Activity如果采用了透明的主题,当前Activity不会回调onStop()方法
onCreate() 和 onDestory()配对使用,只可能 调用一次
onStart() 和onStop() 配对使用,多次调用
onResume()和onPause()配对使用,多次调用
onPause()和onStop()不用执行耗时操作,否则影响其它Activity的显示
Activity异常生命周期
执行 onSaveInstanceState() 和onRestoreInstanceState()
onSaveInstanceState()在onStop()调用之前,可能 在 onPause()之前调用,也可能 在onPause()之后调用
onRestoreInstanceState() 在onStart()之后调用
内存不中可能 导致低优先级的Activity被杀死
1. 前台Activity 正在与用户交互的,
2.可见但非前台Activity (例如Activity上弹出Dialog),不能与用户进行交互
3.后台Activity--已经被暂停的Activity
在旋转屏幕时,不想重新创建Activity
android:configChanges = "orientation | keyboardHidden"
Activity 启动模式
1. standard 标准模式,默认模式
多实例的实现
任务栈是“后进先出”的模式
谁启动了这个Activity,它就在启动它的Activity的栈里
getApplicatioinContext().startActivity() 会报错 , 因为 非Activity 的Context 没有在任何一个Task 里
解决办法: intent.sefFlag(Intent.FLAG_ACTIVITY_NEW_TASK)
2. singleTop 栈顶复用模式
如果新Activity位于栈顶,则不用被重新创建,调用onNewIntent(),onCreate()和onStart()不会被调用
如果存在但非栈顶,会重新创建
3.singleTask 栈内复用模式 单实例模式
只要Activity在一个栈中存在,多次启动都不会创建新的实例,调用onNewIntent(),具有clearTop()效果
4. singleInstance 单实例模式
Activity只能单独存在于一个栈中
所有Activity所需的任务栈的名字为应用的包名
Activity 的Flags
FLAG_ACTIVITY_NEW_TASK 等同 singleTask
FLAG_ACTIVITY_SINGLE_TOP 等同 singleTop
FLAG_ACTIVITY_CLEAR_TOP + FLAG_ACTIVITY_NEW_TASK 等同 singleTask
Intent 的匹配规则
action的匹配
Intent中的action 存在且必须 和过滤规则中的其中一个action相同
category 的匹配
Intent中的category
存在且必须 和过滤规则中的其中一个action相同;可以默认没有,系统默认会加一个 android.intent.category.DEFAULT
data 的匹配规则
必须有data,且完全匹配
调用setDataAndType() ,不能先调用setData() ,再调用setType() ,两者会互相清除数据