美文网首页
Activity生命周期和启动模式

Activity生命周期和启动模式

作者: JasonHwang | 来源:发表于2020-02-10 11:05 被阅读0次

    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:桌面。

    相关文章

      网友评论

          本文标题:Activity生命周期和启动模式

          本文链接:https://www.haomeiwen.com/subject/yuxaxhtx.html