美文网首页
弄懂Activity四大启动模式

弄懂Activity四大启动模式

作者: 瀚海网虫 | 来源:发表于2020-03-01 13:42 被阅读0次

    demo地址
    https://github.com/jjbheda/activitylaunchmodel/blob/master/README.md

    1. 易混概念

    image.png

    Activity 属于Application,Task属于Android操作系统,独立于应用存在。
    Task 并不依附于Application存在,一个task中可包含多个应用的Activity。

    Home键旁边那个方形键(navigation)键中看到的,是task列表,不是Application列表。
    查看当前正在运行的task列表:

    adb shell dumpsys activity activities | sed -En -e '/Stack #/p' -e '/Running activities/,/Ruan #0/p'

    2. Task 启动模式

    1. launcher 启动: 例如点击app 图标,未拉起的话,新建task (通过startActivity),点击后,未必一定拉起主页面
    2. navigation键启动 : 恢复
    3. 通知栏 :未拉起的话,新建task (通过startActivity)
    4. 其他app scheme 跳转:未拉起的话,新建task (通过startActivity)

    3. Activtiy 生命周期

    image.png

    onStart方法和onResume方法有什么区别?
    (1)是否在前台。onStart: 可见但不在前台,不可交互;onResume:在前台。(2)职责不同,onStart:主要还是进行初始化工作,onResume:根据官方的建议,可以做开启动画和独占设备的操作。

    onPause方法和onStop方法有什么区别?
    (1)是否可见。onPause:可见,onStop:不可见,但Activity对象还在内存中。(2)在系统内存不足的时候可能不会执行onStop方法,因此程序状态的保存、独占设备和动画的关闭、以及一些数据的保存最好在onPause中进行,但要注意不能太耗时。

    4. 启动模式与启动FLAG

    4种启动模式只能在Manifest中定义,是为开发者提供的限定Activity启动模式的方式。 Flag 是调用方启动Activity 时,提供的API,是给调用方提供的,启动对方Activity的启动模式。

    5. 启动模式一般架构

    image.png

    5.1 Standard 与SingleTop 是一类

    如果想要指定新task中启动Activity,必须同时满足:

    1. 指定另外的affinity
    2. 指定启动模式为new task

    如果未指定affinity,仅仅使用new task 是无效的,还是会在本task中新建一个实例。

    affinity
    简单的可看成代表task的名字,默认是包名。
    如果一个Activity有TaskAffinity但是没有singleTask/FLAG_ACTIVITY_NEW_TASK时,那TaskAffinity无效。
    如果一个Activity没有singleTask/FLAG_ACTIVITY_NEW_TASK,那么启动它后它会存在于启动它的那个Task内(如果允许的话)。

    作者:hyzhang98
    链接:https://www.jianshu.com/p/a3958f0a60f6
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    • Standard
      典型的多实例实现,一个任务栈中可以有多个实例,每个实例也可以属于不同的任务栈。在这种模式下,谁启动了这个 Activity,那么这个 Activity 就运行在启动它的那个 Activity 所在的栈中。
    • SingleTop
      栈顶复用模式。 已在栈顶,不会重新创建,而是直接复用。

    5.2 SingleTask 与SingleInstance 是一类

    与New Task Flag 无关
    其他Flag 会正常执行,比如CLEAR_FLAG 之类

    SingleTask: 栈内有的话,直接将其他Activity 出栈,保证该实例处于栈顶位置。 如果不存在,则在当前栈重建一个实例(指定affinity除外)。

    SingleInstance: 独门独户,只能启动在独立的task。但如果已存在,不在启动新task。

    6. OnNewIntent

    1. standard 每次都new,不会执行OnNewIntent (唯一例外:从app图标启动后,再回到桌面点击。这种情况下,系统设置了特殊flag,不会new,而是直接回复)
    2. SingleTop, SingleTask,SingleInstance 都会走OnNewIntent
      注:Navigation 切换回来,走的是OnRestart--Onstart---onResume 不走OnNewIntent


      image.png

    7. 适合场景

    7.1 singleTop

    适合启动同类型的 Activity,例如:
    •接收通知启动的内容显示页面
    •登录页面

    7.2 singleTask

    适合作为程序入口,例如:
    •WebView页面
    •扫一扫跳转页
    •确认订单界面

    7.3 singleInstance

    适合需要与程序分离开的页面,例如:
    •闹铃的响铃界面
    •来电页面
    •锁屏页

    相关文章

      网友评论

          本文标题:弄懂Activity四大启动模式

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