一、Activity生命周期
1.什么是Activity?
用户交互接口,提供了一个界面,让用户进行点击,各种滑动操作。
2.生命周期
2.1 Activity的四种状态
running 表明activity是活动状态,用户可以点击屏幕,屏幕会做出相应,是处于一个Activity栈顶的状态。
paused 表明activity失去焦点的时候,或者一个非全屏的一个activity占据,再或者被一个透明的activity放置在栈顶,这种情况下activity会处于paused状态
stopped 当activity 被另一个activity 完全覆盖时,被覆盖的activity处于stopped状态。activity时不可见的状态。
这种情况下这个被覆盖的activity所占的内存,以及成员变量信息,都有可能还存在,在内存不紧张的情况下。
killed activity 已经被系统回收,系统所保存的信息以及成员变量都不在了。
2.2activity生命周期分析
activity启动——>oncreate()———>onstart() 可见,不能交互——>onresume()可见,可进行交互
点击home回到主页面(activity不可见)——>onpause()停止转台,可见,不可点击 ——>onstop() 被停止,可不见
再次回到activity ——>onRestart()正在重新启动,从不可见到可见——>onStart()—>onResume()
推出当前activity时 ——>onStop()——>onDestroy() 正在销毁,可以做一些资源释放。
2.3android进程优先级(小知识点)
前台进程 :处在前台与用户交互的activity,或者前台activity绑定的service
可见进程 :activity出去前台,用户可见但是不可点击的情况下
服务 :后台开启一个service 叫服务进程
后台:点击home activity变成后台进程,系统会根据内存情况来进行相应的回收
空:优先级最低,不属于前四种就空进程,表示只是一种系统处于缓存的目的把它保留,可以随时被系统回收。
二、android任务栈
2.1—任务栈的特点是后进先出,可以看做一个“桶”。
2.2—android系统通过任务栈来管理activity,当activity完全出栈,才能安全、完全的退出程序,任务栈只有被销毁了才是处于数据最安全的状态。
2.3—如果不销毁内存栈,则需要合理的保存这个任务栈,任务栈会保留每个activity的状态以及Activity的信息。一定要安全的保存任务栈。
2.4—任务栈可以有一个或多个,activity也可以独享一个任务栈。需要与启动模式结合。
三、activity启动协议
3.1— standard 这种模式下,每当启动的activity都会重新创建一个activity实例并加入到任务栈中。不会考虑task中以前是不是已经存在这个Activity实例,不会复用,只会重新创建。
这种情况下 生命周期方法会重新执行。对内存消耗大。
3.2—singleTop 栈顶复用,如果创建的Activity已经处于栈顶,则不会重新创建Activity实例,如果创建的Activity处于栈的第二个位置,则还是会重新创建Activity实例。
3.3—singleTask 栈内复用模式,singleTop 与 singleTask 区别在于 singleTop 只会检测栈顶,而singleTask 是检测整个任务栈当中是否存在需要启动的Activity ,如果存在则会直接将Activity置于栈顶。
注:这种模式下会把需要置于栈顶的 Activity 之上的Activity都从任务栈中移除出栈销毁,同时会回调onNewIntent()方法。
3.4—singleinstance 这种模式下这个activity 再整个任务栈中只有一个实例,而且Activity 会独享任务栈。(极少使用)
四、scheme跳转协议
是一种页面内的跳转协议,是一非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面
应用场景:
1.通过scheme协议,服务端可以下发一个url路径,客户端根据服务端下发url跳转到相应页面,可以通过通知栏消息定制化跳转页面。
2.可以通过H5页面跳转页面等。
3.app可以通过url跳转到另一个app的指定页面。