假设我有一个简单的应用,其中包含一个SplashScreenActivity
和一个MainActivity
。
以下是我的AndroidManifest.xml
的一部分:
<activity
android:name=".front.activities.splashscreen.SplashScreenActivity"
android:launchMode="standard"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".front.activities.main.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/Main_Title"
android:launchMode="singleTop"
android:screenOrientation="portrait"/>
然后我的SplashScreenActivity
在MainActivity
中打开onCreate()
。
如果该应用是从Google Play而不是启动器启动的,那么如果我按下主屏幕并单击启动器中的应用图标,则会再次启动另外一个SplashScreenActivity
,因此在后堆栈上还会启动另外一个MainActivity
SplashScreenActivity
已再次启动(或通过查看日志)SplashScreenActivity
和MainActivity
。经过几次尝试,如果我们按“后退”按钮,我们会注意到后退堆栈中有多个MainActivity
。
SplashScreenActivity
。但是,如果我再次按下启动器中的应用程序图标,它将不会创建第三个SplashScreenActivity
。它将第一个启动的MainActivity
带到顶部。SplashScreenActivity
设为android:launchMode="singleTask"
。没有帮助。MainActivity
设为android:launchMode="singleTask"
。这将防止创建多个MainActivity
,但不能解决多次启动SplashScreenActivity
的问题。您可能还假设MainActivity
不应设置为singleTask
。通过单击启动器中的应用程序图标,Android应该能够在我的任务管理器中发现该应用程序已启动,并且只需将其置于顶部即可。
我该如何解决?
答案 0 :(得分:1)
某些启动器存在此错误:从主屏幕启动应用程序时,会创建新的初始活动实例,而不是继续运行该应用程序。可以通过添加
来解决if (!isTaskRoot()) {
finish();
return;
}
至初始活动的onCreate()
。
另请参阅:
Resume last activity when launcher icon is clicked,
Resume the Top Activity instead of starting the Launcher Activity
答案 1 :(得分:0)
添加
android:noHistory="true"
标记以启动屏幕活动。它总是填充一个实例,也不会存储在后堆栈中。