美文网首页
一、Activity详解

一、Activity详解

作者: 木小伍 | 来源:发表于2021-09-18 13:41 被阅读0次
    1.生命周期
    35b59f8a5edd806c9f5fe572c9553cd.png
    2.特殊情况下的生命周期
    • 横竖屏切换
      onSavaInstanceState和onRestoreInstanceState
      在activity异常终止的情况下。系统会调用onSaveInstanceSate来保存当前 状态的Activity状态, 这个方法只会在被异常终止情况下调用。当异常终止的 activity被重建的时候,系统会调用onRestoreInstanceState方法,把保存的boundle传递给onRestoreInstanceState和oncreat方法。
      横竖屏切换的生命周期: onPause()->onSaveInstanceSate()->onStop()->onDestroy()->onCreat()-> onStart()->onRestoreInstanceState()->onResume(),可以在AndroidManifest文件的activity中指定如下属性来避免横竖屏切换的时候,activity的销毁和重建。
        Android:configChanges = "orientation|screenSize"
    

    • 资源内存不足导致优先级低的activity被杀死
      1. 前台activity----正在和用户交互的activity,优先级最高
      2. 可见的但非前台Activity----比如activity中弹了一个对话框,导致Activity可见但是位于后台无法和用户交互。
      3. 后台Activity----已经被暂停了的Activity,比如执行了onStop,优先级最低。
        当系统的内存不足的时候,会按照上述优先级从最低到高去杀死目标activity所在的进程。生命周期同上。

    3. 启动模式
    1. 标准模式(standard)
      绝大多数的Activity,每次启动一个Activity,就会创建Activity实例并置于栈顶。 谁启动了这个activity,那么这个实例,就运行在启动它的那个Activity栈顶。
      特殊情况: 如果,在Service或者Application中启动一个Activity,其没有所谓的任务栈,可以使用标记位Flag来解决。为待启动的Activity指定FLAG_ACTIVITY_NEW_TASK。

    2. 栈顶复用模式(singleTop)
      如果需要新建的Activity位于任务栈的栈顶,那么此Activity不会重建,而是直接复用栈顶的实例,并且回调如下方法:
      应用场景:显示通知信息。

    @override
    protected   void   onNewIntent ( Intent   intent )   {
        super.onNewIntend(intent);
    }
    

    3.栈内复用模式(singleTask)
    该模式是一种单例模式,即一个任务栈中只有一个该Activity实例,该模式,可以通过AndroidManifest文件的Activity中指定该Activity需要加载到指定的任务栈中。如果指定的任务栈位于栈顶直接复用,如果位于栈内,会直接将其上方的所有Activity清除出栈。
    应用场景: 大多数App的主页。

     <activity android:name=".Activity1"
               android:launchMode="singleTask"
               android:taskAffinity="com.lvr.task" //指定的任务栈
               android:label="@string/app_name">
     </activity>
    
    1. 单例模式(singleInstance)
      作为栈内复用模式的加强版,打开该Activity时,直接创建一个新的任务栈,并把该实例放置在栈中。一旦该模式的Activity实例已经存在某个任务栈中,任何应用再激活该Activity时都会复用该栈中的实例。
      应用场景:呼叫来电模块。
    4. Activity的Flags
    • FLAG_ACTIVITY_NEW_TASK 其效果与指定Activity为singleTask模式一致。
    • FLAG_ACTIVITY_SINGLE_TOP 其效果与指定Activity为singleTop模式一致。
    • FLAG_ACTIVITY_CLEAR_TOP 具有此标记位的Activity, 当它启动时, 在同一个任务栈中所有位于它上面的Activity都要出栈。

    相关文章

      网友评论

          本文标题:一、Activity详解

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