Android——Activity浅析

1. 生命周期
一个从启动到结束会以如下顺序经历整个生命周期:
()->()->()->()->()->()
1.1 常见情景的生命周期
①针对一个特定的 , 第一次启动 , 回调如下:()->()->()
②用户打开新的的时候 , 上一个的回调如下:()->()
③再次回到原时 , 回调如下:()->()->()
④按back键回退时 , 上一个回调如下:()->()->()
⑤按Home键切换到桌面后又回到该 , 回调如下:()->()->()->()->()
⑥调用()方法后 , 回调如下:()
(以在()方法中调用为例 , 不同方法中回调不同 , 通常都是在()方法中调用)
1.2 特殊场景的生命周期
横竖屏切换:
在横竖屏切换的过程中 , 会发生被销毁并重建的过程 。在了解这种情况下的生命周期时 , 首先应该了解这两个回调
和 te 区别:
横竖屏切换的生命周期:
()->()-> ()->()->()->()->te->()

Android——Activity浅析

文章插图
当然这种情况也是可以被避免的:
可以通过在文件的中指定如下属性:
android:configChanges = "orientation| screenSize"
来避免横竖屏切换时 , 的销毁和重建 , 而是回调了下面的方法:
@Overridepublic void onConfigurationChanged(Configuration newConfig){super.onConfigurationChanged(newConfig);}
资源内存不足导致优先级低的被杀死:
优先级介绍:
生命周期与上述横竖屏切换一致:
()->()-> ()->()->()->()->te->()
2.运行状态3.启动模式
启动模式的结构——栈
任务栈采用“后进先出”的栈结构
1.标准模式()
每启动一次 , 就会创建一个新的实例并置于栈顶 。谁启动了这个 , 那么这个就运行在启动它的那个所在的栈中 。
2.栈顶复用模式()
如果需要新建的位于任务栈栈顶 , 那么此的实例就不会重建 , 而是重用栈顶的实例 。并回调如下方法:
@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);}
由于不会重建一个实例 , 则不会回调其他生命周期方法 。
如果栈顶不是新建的,就会创建该新的实例 , 并放入栈顶 。
【Android——Activity浅析】3.栈内复用模式()
该模式是一种单例模式 , 即一个栈内只有一个该实例 。
可以通过在文件的中指定该需要加载到那个栈中 , 即的可以指定想要加载的目标栈 。和配合使用 , 指定开启的加入到哪个栈中 。

:每个都有属性 , 这个属性指出了它希望进入的Task 。
如果一个没有显式的指明该的 , 那么它的这个属性就等于指明的 , 如果也没有指明 , 那么该的值就等于包名 。
执行逻辑:
4.单例模式()
栈内复用模式()的加强版,打开该时 , 直接创建一个新的任务栈 , 并创建该实例放入新栈中 。一旦该模式的实例已经存在于某个栈中 , 任何应用再激活该时都会重用该栈中的实例 。
特殊情况——前台栈和后台栈的交互
假如目前有两个任务栈 。前台任务栈为AB , 后台任务栈为CD , 这里假设CD的启动模式均为,现在请求启动D , 那么这个后台的任务栈都会被切换到前台 , 这个时候整个后退列表就变成了ABCD 。当用户按back返回时: