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
  • 相关阅读:
    严重: Parse error in application web.xml file at jndi:/localhost/ipws/WEBINF/web.xml java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml
    Failed to install .apk on device 'emulator5554': timeout解决方法
    java.lang.NoClassDefFoundError:org.jsoup.Jsoup
    Conversion to Dalvik format failed: Unable to execute dex:解决方法
    apache Digest: generating secret for digest authentication ...
    Description Resource Path Location Type Project has no default.properties file! Edit the project properties to set one.
    android service随机自启动
    MVC3 安装部署
    EF 4.3 CodeBased 数据迁移演练
    SQL Server 2008开启sa账户
  • 原文地址:https://www.cnblogs.com/lcy0515/p/10807830.html
Copyright © 2011-2022 走看看