1、Activity生命周期
activty生命周期过程a、当用户打开新的Activity或切换到桌面的时候,回调为onpause()->onStop()。如果新Activity采用透明主题,则onStop()不调用
b、onStart和onStop是从是否可见的角度来回调的,onResume和onStart是从是否位于前台的角度来回调的
c、不能再onPause中做重量级的操作,因为必须onPause执行完成之后,新的Activity的onResume方法才会被调用,影响体验
d、异常情况下activity被销毁,其的生命周期会按顺序执行,但会在onDestory前新增onSaveInstanceState和在onCreate后新增onRestoreInstanceState方法,通过Bundle保存和恢复数据,该两个方法承兑出现,只有在异常终止Activity时调用,正常情况不调用,异常情况包括:资源相关系统配置改变(横竖屏切换、系统语言切换等)、系统资源紧张杀死Activity等。
e、资源相关系统配置改变不重启Activity生命周期的方法:添加configChanges属性值android:configChanges= "orientation|locale"
2、Activity启动模式
1)standard:标准模式,也是系统默认模式。每次启动一个Activity都会重新创建一个实例,不管其是否存在。谁启动这个Activity,这个Activity就运行在启动它的那个组件所在的栈中。当我们用ApplicationContext去启动standard模式的Activity时,系统会报错,因为非Activity的Context没有任务栈。
2)singleTop:栈顶复用模式,如果新的Activity已经在栈顶,不会重新创建,onNewIntent方法会被调用。假设目前栈内从低到顶依次为ABCD,这时候如果要启动D,如果D为singleTop模式,则D的onNewIntent方法被调用,栈内情况依然为ABCD,如果D的启动方式的standard则栈内情况为ABCDD。
3)singleTask:栈内复用模式,只要Activity在一个栈中存在,那么多次启动该Activity都不会重新创建实例,只会调用器其onNewIntent方法。
4)singleInstance:单例模式,该启动模式下,系统会会为它单独创建一个新的任务栈,该Activity单独运行在新的任务栈中,后续请求均不会再创建新的实例,除非该栈被系统销毁。
a、默认情况下Activity的任务栈为其包名,也可以通过TaskAffinity单独为Activity制定任务栈,属性值必须包含“.”且不能喝包名相同。一般和singleTask配合使用
b、假设有ABC三个Activity,A为默认启动方式,BC为singleTask启动模式且指定其他任务栈,现从A启动B,在B再启动C,从C启动A,再从A启动B,现在点击两次返回,会回到哪个界面。answer:桌面。
网友评论