单实例:启动器的启动模式 Activity

Single Instance : Launch Mode of Launcher Activity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.jatin.notification">

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:launchMode="singleInstance" > <!-- Activity A -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".NotificationActivity"
            >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
        <activity
            android:name=".DialogActivity"
            android:excludeFromRecents="true"
            android:noHistory="true"
            android:theme="@style/Theme.AppCompat.Dialog.MinWidth" />
        <activity
            android:name=".SecondActivity" /><!-- Activity B -->
    </application>

</manifest>

根据单实例,系统不会在持有该实例的任务中启动任何其他活动。 activity 始终是其任务的唯一成员;此活动启动的任何活动都在单独的任务中打开。

但是,当我从 Activity A(Launcher Activity)-> Activity B 开始导航时 Activity(intent*) 而不是在新任务中Activity B 超越了 Activity A 的任务。 虽然当我通过 startActivity(intent*) 从 B 导航到 A 时,它显示了 A.

的单个实例

*未添加标志。

为什么 Activity B 被推到 Activity A 之上(因为 Activity 有启动模式:"singleInstance")而不是创建一个新任务?

活动列表:

任务记录{14ba4a25 #18 A=com.example.nischay.notification U=0 sz=2} 运行 #1: Activity记录{2a37b313 u0 com.example.nischay.notification/.SecondActivity t18} 运行 #0: Activity记录{1ab16fa7 u0 com.example.nischay.notification/.MainActivity t18}

mResumedActivity: ActivityRecord{2a37b313 u0 com.example.nischay.notification/.SecondActivity t18} mLastPausedActivity: ActivityRecord{1ab16fa7 u0 com.example.nischay.notification/.MainActivity t18}

详情:

设备:联想k50a40 Android版本:5.0 CompileSdkVersion : 25

代码

Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent, REQUEST_CODE_NOTIFY);

宾果!最后解释一下这种奇怪的行为!

你说你从 MainActivity 开始 SecondActivity 是这样的:

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE_NOTIFY);

使用 startActivityForResult() 时, 启动的 Activity 必须 运行 与 Activity 在同一任务 中期待结果(即:启动 Activity)。因此,Android 将忽略 MainActivitylaunchMode 并在同一任务中启动 SecondActivity

您创建了一个未记录的冲突。要解决您的问题,您需要决定您想要什么。您不能有调用 startActivityForResult()singleInstance Activity。选择另一种机制在 SecondActivityMainActivity 之间进行通信,或者删除 MainActivity.

的特殊启动模式

你为什么要 MainActivity 成为 singleInstance?这有什么原因吗?