活动'堆栈(退出应用程序后,系统清除堆栈,如果launchMode =" singleInstance")

时间:2016-12-06 11:26:09

标签: android android-activity launchmode

我不明白为什么会发生这种情况:我需要在单个实例中创建每个Activity,因此我将android:launchMode="singleInstance"放在Manifest中。但是,当我推动家庭'在设备上再次打开它,系统清除堆栈并打开根Activity,而不是打开的最后一个。如何为用户保留上次打开的活动,但保留singleInstance在Manifest中?

编辑: 清单

...   


    <application
       ...>           

        <activity
            android:name=".ui.login.LoginActivity"
            android:launchMode="singleInstance"
            android:screenOrientation="portrait"/>
        <activity
            android:name=".ui.activity.MainActivity"
            android:label="${app_title_constant}"
            android:launchMode="singleInstance"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <data android:scheme="${scheme}"/>

                <action android:name="android.intent.action.VIEW"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity>
        <activity
            android:name=".ui.more.service.ScannerActivity"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme"/>
        <activity
            android:name=".ui.activity.CardsListForSendActivity"
            android:launchMode="singleInstance"
            android:screenOrientation="portrait"/>

        <activity
            android:name=".ui.activity.CountriesActivity"
            android:launchMode="singleInstance"
            android:screenOrientation="portrait"/>
        <activity
            android:name=".ui.activity.StepperCardPurchaseActivity"
            android:launchMode="singleInstance"
            android:screenOrientation="portrait"/>

        <service
            android:name=".service.CacheContactsIntentService"
            android:exported="false"/>
        <service
            android:name=".managers.push.PushNotificationExtenderService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.onesignal.NotificationExtender"/>
            </intent-filter>
        </service>

        <receiver
            android:name=".managers.push.PushBroadcastReceiver"
            android:enabled="true">
        </receiver>
    </application>

</manifest>

1 个答案:

答案 0 :(得分:0)

请勿使用launchMode="singleInstance"。这不是必需的,实际上并不适合你。通常,指定&#34; singleInstance&#34;将导致每个Activity启动进入自己独立的任务。然而,这种情况在你的情况下不会发生,因为你没有指定&#34; taskAffinity&#34;在清单中。由于默认情况下所有活动都具有相同的任务关联,因此它们都将在同一任务中结束(即使您指定了&#34; singleInstance&#34;启动模式)。

删除所有launchMode说明符,然后重试。

Android的标准行为是将应用程序从oforeground带到后台(按下HOME按钮并返回应用程序后)将用户返回到任务堆栈(与他离开时完全相同)。