发表于: 2018-12-07 21:47:51
1 898
一、今天完成的事情
重新看了活动的生命周期
返回栈
Android是用任务Task来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈被称为返回栈(Back Stack)。栈是一种先进先出的数据结构,默认情况下,每当启动一个新的活动,这个活动就会在返回栈入栈,并处于栈顶的位置,每当按下Back键或者调用finish()销毁活动,处于栈顶的活动就会出栈,这时前一个入栈的活动就会重新处于栈顶的位置,而系统总是会将处于栈顶的活动显示给用户。
活动在其生命周期中最多会有四种状态
1.运行状态
当一个活动处于顶栈时就处于运行状态,系统不会随意回收处于栈顶的活动。
2.暂停状态
当一个活动不再处于栈顶状态,但仍然可见时,这时活动就进入了暂停状态。系统也不会随意回收暂停状态的活动,因为它仍是可见的,只有在内存非常紧张的时候系统才会考虑回收这种活动。
3.停止状态
当一个活动不再处于栈顶位置并且完全不可见时,就进入了停止状态。系统会为处于停止状态的活动保存状态和成员变量,担当别的地方需要内存时,停止状态的活动随时可能会被回收。
4.销毁状态
当一个活动从返回栈中被移除后就会处于销毁状态,系统会优先回收处于销毁状态的活动。
活动的生命周期
Activity类中有7个回调方法覆盖了活动的生命周期的每一个环节
1. onCreate()
在活动第一次被创建时调用,活动的初始化操作比如加载布局、绑定事件都应该在此方法中完成。
2. onStart()
这个方法会在活动由不可见变为可见时调用。
3. onResume()
这个方法在活动准备号和用户交互时调用,此时活动一定处于返回栈的栈顶,处于运行状态
4. onPause()
系统准备去启或者回复另一个活动时会调用此方法。通常需要在此方法中释放一些消耗CPU的资源,并保存一些关键数据,这个方法的执行速度一定要快,不然会影响新的顶栈的活动的使用。
5. onStop()
活动完全不可见时会调用此方法。这个方法和onPause()的主要区别在于:假如当前活动为A,当我们启动一个新活动B时,如果新活动B只是占据了屏幕的一部分,比如说一个对话框,那么活动A就成了活动B的“背景”,此时虽然活动B处于栈顶,但活动A仍是可见的,那么onPause()方法就会被执行,而
onStop()方法不会执行;如果活动B占据了整个屏幕,活动A完全被“遮住”了,看不见了,那么就会依次执行onPause()、onStop()方法。
6. onDestroy()
此方法在活动被销毁前调用,执行后活动会变为销毁状态。
7. onRestart()
在活动由停止状态转变为运行状态之前调用。
活动的3个生存期
1.完整生存期
从onCreate()到onDestroy()
2.可见生存期
从onStart()到onStop(),在此期间活动总是可见的,但并不一定能和用户交互。
3.前台生存期
从onResume()到onPause(),在此期间活动处于运行状态,可以和用户交互。
可见除了onRestart()方法,其他方法都是两两相对的
活动的启动模式
活动有4种启动模式:standard、singleTop、singleTask、singleInstance,如果需要为活动指定启动模式,可以在AndroidManifest中为活动设置
android:launchMode属性。
1.standard
这是活动的默认启动模式,处于该模式时,系统不管这个活动是否已经在返回栈中存在,即使处于栈顶,每次启动都会创建该活动的一个新的实例。
2.singleTop
在singleTop模式下,启动活动时,如果返回栈的栈顶已经是该活动,则会直接使用它,不会再创建新的活动实例。如果活动处于返回栈中但不是在栈顶,那么启动该活动时还是会创建新的活动实例。
3.singleTask
当活动被指定为singleTask模式时,每次启动该活动,系统都会首先检查返回栈中是否已经存在该活动的实例(无论它位于栈顶还是其他位置),如果发现已经存在就会直接使用,并将该活动之上的活动全部出栈,让该活动处于栈顶,如果不存在,就会创建新的实例。
4.singleInstance
此模式下,当活动被启动时,会有一个新的返回栈来管理这个活动。
这个模式可以解决共享活动实例的问题。举个栗子:当前程序中的活动A是允许其他程序调用的,让其他程序和当前程序共享活动A的实例,使用前3种模式是无法实现的,因为每个程序都有自己的返回栈,同一个活动在不同的返回栈入栈就会创建不同的实例,但如果使用singleInstance模式就会有一个单独的返回栈来管理活动,无论哪个程序来访问这个活动,都会使用同一个返回栈,这样就实现了活动共享。
二、明天的计划
花部分时间回头看广播Broadcast
接入支付宝支付
三、遇到的问题
看逗你学的项目时,文件太多了,感觉有些无从下手,不知道从哪开始看
四、收获
重新学习了活动的生命周期,不敢说完全掌握了,但相比以前的理解更进了一步,尤其是对活动的4种启动模式。
评论