Единственный экземпляр: режим запуска активности запуска

<?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>

Согласно Single Instance, система не запускает никаких других действий в задаче, содержащей экземпляр. Деятельность всегда является единственным и единственным участником своей задачи; любые действия, начатые этим, открываются в отдельной задаче.

Но когда я перешел от Действия A(Launcher Activity)-> Activity B через startActivity(intent*) вместо того, чтобы быть в новой Задаче, Activity B встает поверх задачи Activity A. Хотя, когда я перешел на A из B через startActivity(intent*), он показывает один экземпляр A.

* ФЛАГИ НЕ БЫЛИ ДОБАВЛЕНЫ.

Почему действие B выдвинулось поверх действия A (поскольку у Activity был режим запуска: "singleInstance") вместо создания новой задачи?

Список видов деятельности:

TaskRecord {14ba4a25 # 18 A = com.example.nischay.notification U = 0 sz = 2} Прогон № 1: ActivityRecord{2a37b313 u0 com.example.nischay.notification/.SecondActivity t18} Прогон № 0: ActivityRecord{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}

Подробности:

Устройство: Lenovo k50a40 Android Версия: 5.0 CompileSdk Версия: 25

Код

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

1 ответ

Решение

Бинго! Наконец объяснение этого странного поведения!

Вы сказали, что вы начали SecondActivity от MainActivity как это:

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

Когда используешь startActivityForResult(), Activity запускается должен выполняться в той же задаче, что и Activity который ожидает результат (то есть: запуск Activity). Из-за этого Android игнорирует launchMode из MainActivity и начиная SecondActivity в той же задаче.

Вы создали конфликт, который не задокументирован. Чтобы решить свою проблему, вам нужно решить, что вы хотите. Вы не можете иметь singleInstanceActivity что вызывает startActivityForResult(), Либо выберите другой механизм для общения между SecondActivity а также MainActivity или удалите специальный режим запуска для MainActivity,

Почему ты хочешь MainActivity быть singleInstance тем не мение? Для этого есть причина?

Другие вопросы по тегам