• android 启动模式


    Activity加载模式
    standard: 
    标准模式,一调用startActivity()方法就会产生一个新的实例。 对于每一个启动Intent都会生成一个activity的新实例.
    跳转源和目的activity为同一个taskid

    singleTop: 
     当activity被设置为singleTop的加载模式时,如果堆栈的顶部已经存在了该Activity,
    那么,它便不会重新创建,而是调用onNewIntent。如果,该Activity存在,但不是在顶部,那么该Activity依然要重新创建.
    跳转源和目的activity为同一个taskid

    singleInstance:
    设置为该模式的activity将独立创建一个 task,并且独享该taskid.
    其所在栈的唯一activity,它会每次都被重用。其它activity不能存在那个task里.
    当发现已经存在一个Task中包含自己的实例时,它会调用自己的onNewIntent。
    eg: a(taskid=1)->b(sinleInstance,taskid=2)-->c(taskid=1)
    如果a在跳转到b后自己调用了finish()方法,则c的taskid=3
    跳转源和目的activity的taskid一定不相同

    singleTask: 
    eg: a(taskid=1)->b(singleTask,taskid=1)
    设置为singleTask模式的activity并不一定总是新开一个taskid.
    当它不是app的启动面时,将和启动面taskid相同.
    但是将非启动面设置为该模式要注意数据丢失问题.
    因为很有可能是a为欢迎页面,初始化等耗时工作完成后调用b.并自宫a(finish方法)
    这时候当系统回收内存后,在home面重新进入程序的时候,a中被初始化的数据将丢失.
    因为a已经被自宫,导致初始化数据丢失.
    当singleTask模式的Activity启动时,如果发现在某个Task中已经存在,那么它会先将该它上部的销毁,然后调用它的onNewIntent函数。

    Activity状态:
    活动的:
    当一个Activity在栈顶,它是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。
    当另外一个Activity被激活,这个将会被暂停。

    暂停:
    在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了。有可能原因是一个透明或者非全屏的Activity被激活。
    当被暂停,一个Activity仍会当成活动状态,只不过是不可以接受用户输入。
    在极特殊的情况下,Android将会杀死一个暂停的Activity来为活动的Activity提供充足的资源。
    当一个Activity变为完全隐藏,它将会变成停止。"

    停止:
    当一个Activity不是可视的,它“停止”了。
    这个Activity将仍然在内存中保存它所有的状态和会员信息。尽管如此,当其它地方需要内存时,它将是最有可能被释放资源的。
    当一个Activity停止后,一个很重要的步骤是要保存数据和当前UI状态。一旦一个Activity退出或关闭了,它将变为待用状态。

    待用:
    在一个Activity被杀死后和被装载前,它是待用状态的。待用Acitivity被移除Activity栈,并且需要在显示和可用之前重新启动它。


    Intent:
    Activity的加载模式受启动Activity的Intent对象中设置的Flag和manifest文件中Activity的元素的特性值交互控制。

    FLAG_ACTIVITY_REORDER_TO_FRONT
    如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。

    FLAG_ACTIVITY_NEW_TASK

    FLAG_ACTIVITY_CLEAR_TOP 
    FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 
    FLAG_ACTIVITY_SINGLE_TOP  

    android:taskAffinity

    来自internet

  • 相关阅读:
    LeetCode 热题100 11. 盛最多水的容器
    LeetCode 热题100 21. 合并两个有序链表
    LeetCode 热题100 17. 电话号码的字母组合
    LeetCode 热题100 19. 删除链表的倒数第N个节点
    cmake 指定Cpu架构
    [学习笔记]普通平衡树(Splay)
    [原创] RestartPC64中文版v1.0.0.9
    Vue 04 谷歌浏览器配置vue开发者工具
    Vue02 Node下载安装
    springboot框架返回日期值少一天
  • 原文地址:https://www.cnblogs.com/dLong/p/2535934.html
Copyright © 2020-2023  润新知