zoukankan      html  css  js  c++  java
  • android学习笔记----启动模式与任务栈(Task)

    看来看去,关于启动模式和任务栈的还是觉得这位博主写的好,有例子便于理解。记录下来,以后方便查阅和添加笔记。

    Activity启动模式与任务栈(Task)全面深入记录(上):https://blog.csdn.net/javazejian/article/details/52071885

    Activity启动模式与任务栈(Task)全面深入记录(下):https://blog.csdn.net/javazejian/article/details/52072131

    然后记住

    taskAffinity属性是标识着Activity所需要的任务栈的名称,不要与当前应用包名相同,否则其值跟作废没两样。

    allowTaskReparenting主要作用是activity的迁移,即从一个task迁移到另一个task,这个迁移跟activity的taskAffinity有关。

    具体原因见上面Activity启动模式与任务栈(Task)全面深入记录(下)

    ==================以下开始做笔记======================

    下表可能有助于区分不同的启动方式:

    启动模式 Default 实例化 是否启动新任务 是否允许在任务中启动其他activity
    standard 每次创建intent时,都会创建一个新实例。此外,实例可以是多个任务的成员,也可以是一个任务中的多个实例。 否。在发起意图的同一任务中打开
    singleTop 与标准完全相同,但如果活动位于Task堆栈的顶部,则使用现有实例。 否。在发起意图的同一任务中打开
    singleTask 单实例

    是。只要设置其他任务栈就是根任务。

    singleInstance 单实例 是。总是根任务。 决不允许。始终是任务中唯一的活动

    可以在Terminal通过 adb shell dumpsys activity activities 命令查看此时栈的情况,只看Running activities (most recent first)即可

    情景一:

    就是如果应用启动默认的A,A再启动singleTask的B,B的taskAffinity设置了另一个任务栈,此时B再启动默认的C,是这样的 

    也就是singleTask的B启动默认的C会和B在同一个任务栈

    但是如果B是singleInstance呢?

    B再启动默认的C就是在原来的任务栈,而不是和B在一个任务栈。

    关于基本用例分析见这里https://blog.csdn.net/zjwfan/article/details/52047719

    情景二:

    是关于向上导航的,其中需要指定父活动。

    要实现向上导航,第一步是声明哪个活动是每个活动的适当父级。这样做允许系统便于导航模式,例如Up,因为系统可以从清单文件中确定逻辑父活动。

    从Android 4.1(API级别16)开始,您可以通过在<activity>元素中指定android:parentActivityName属性来声明每个活动的逻辑父级。

    如果您的应用支持Android 4.0及更低版本,请在您的应用中添加支持库,并在<activity>中添加<meta-data>元素。然后将父活动指定为android.support.PARENT_ACTIVITY的值,与android:parentActivityName属性匹配。

    如下:

    <application ... >
        ...
        <!-- The main/home activity (it has no parent activity) -->
        <activity
            android:name="com.example.myfirstapp.MainActivity" ...>
            ...
        </activity>
        <!-- A child of the main activity -->
        <activity
            android:name="com.example.myfirstapp.DisplayMessageActivity"
            android:label="@string/title_activity_display_message"
            android:parentActivityName="com.example.myfirstapp.MainActivity" >
            <!-- Parent activity meta-data to support 4.0 and lower -->
            <!-- 为了向下兼容 -->
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.example.myfirstapp.MainActivity" />
        </activity>
    </application>

    要在用户按下应用程序图标时向上导航,可以使用NavUtils类的静态方法navigateUpFromSameTask()。当您调用此方法时,它将完成当前活动并启动(或恢复)相应的父活动。如果目标父活动位于任务的后台堆栈中,则会将其提前。它的提出方式取决于父活动是否能够处理onNewIntent()调用:

    如果父活动的启动模式<singleTop>,或者向上的意图包含FLAG_ACTIVITY_CLEAR_TOP,则父活动将被带到堆栈顶部,并通过其onNewIntent()方法接收intent。

    如果父活动具有启动模式<standard>,并且向上意图不包含FLAG_ACTIVITY_CLEAR_TOP,则从堆栈弹出父活动,并在堆栈顶部创建该活动的新实例以接收意图。也就是说父活动会onDestroy()后重新onCreate()。

    官方文档:https://developer.android.google.cn/training/implementing-navigation/ancestral?utm_source=udacity&utm_medium=course&utm_campaign=android_basics

    ========================Talk is cheap, show me the code======================

    CSDN博客地址:https://blog.csdn.net/qq_34115899
  • 相关阅读:
    3 Redis 的常用五大数据类型
    Oracle12C 基本操作和使用
    CentOS7安装VNC服务
    CentOS7.6 安装Oracle12C(下)
    CentOS7.6 安装Oracle12C(上)
    博主创建了一个AGV吧的Discuz,欢迎各位加入进来
    六、openTCS4.17汉化版源码包含通信DEMO,gitee地址见内容
    毕马威图形数独
    五、OpenTCS4.12的模拟运行
    四、通过Socket实现跟AGV小车通信(仅做Demo演示,跟实际工厂运行无关)
  • 原文地址:https://www.cnblogs.com/lcy0515/p/10807830.html
Copyright © 2011-2022 走看看