【发布时间】:2016-12-06 11:26:09
【问题描述】:
我不明白为什么会发生这种情况:我需要在单个实例中创建每个 Activity,所以我将 android:launchMode="singleInstance" 放在 Manifest 中。但是当我在设备上按下“主页”并再次打开它时,系统会清除堆栈并打开根 Activity,而不是最后一个打开的 Activity。如何为用户保留最后一个打开的活动,但在清单中保留singleInstance?
编辑: 清单
...
<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>
【问题讨论】:
-
您“需要在单个实例中创建每个活动”是否有原因?如果没有,不要做你的用户没有预料到的事情。
-
@BartFriederichs 是根据客户的要求。另外,我使用 OneSignal 进行推送通知,当您点击推送时,它会打开 MainActivity,然后用户点击返回并再次查看 MainActivity,因此这是我需要 singleInstance 的第二个原因
-
发布您的清单
-
一般来说,使用
launchMode="singleInstance"是个坏主意。仅当您正在构建“启动器”类型的应用程序时才需要这样做。在所有其他情况下,这通常是错误的。 -
您可以自己管理活动堆栈,这样您就没有
MainActivity的多个实例,如果这是您想要的。您可以根据需要使用singleTop之类的启动模式,但您几乎不应该使用singleTask或singleInstance。
标签: android android-activity launchmode