简短版本:
我正在开发的应用程序在启动时会打开第二个实例"按下后退按钮后。
长版:
当应用程序从"主屏幕启动时#34;它工作正常 - 如果应用程序通过按后退箭头按钮,通过按圆形按钮或方形按钮发送到后台更改为另一个应用程序 - 然后应用程序通过多任务恢复菜单它完美地工作 - 从它停止的地方恢复 - 没有再次显示启动画面,最重要的是没有打开第二个实例。 然而如果将应用程序发送到后台,然后从主屏幕再次启动,则会创建第二个应用程序实例!再次显示启动画面,主要活动显示在屏幕上,而不是用户屏幕上的最后一个活动!这显然不是理想的行为,我尝试过的许多解决方案都不起作用。
清单:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:launchMode="singleInstance">
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:launchMode="singleInstance">
</activity>
<activity
android:name=".Settings_area"
android:screenOrientation="portrait" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyDieXTCaFoIL0kJ_IM4UMBSQL3sNn92AWM" />
<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps" />
<activity android:name=".Splash"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".aboutPageActivity" />
<activity android:name=".turnOffFromNotification"
android:noHistory="true"></activity>
</application>
修改
我还尝试将应用标记中的launchMode
替换为singleTask
和singleInstance
。
答案 0 :(得分:1)
但是,如果将应用程序发送到后台,然后再从主屏幕再次启动,则会创建第二个应用程序实例!再次显示启动画面,主要活动显示在屏幕上,而不是用户屏幕上的最后一个活动!
这是Android
的预期行为。后退按钮(其默认实现)旨在让用户通知系统他/她已完成当前Activity
让Android
销毁{{1实例。
请注意,此类行为与Activity
属性没有任何共同之处。
这显然不是理想的行为,我尝试的许多解决方案都不起作用。
你无法改变它。这是一个用户决定离开android:launchMode
并且OS不再需要Activity
实例的问题。
答案 1 :(得分:0)
通过从android:launchMode="singleInstance">
标记以外的任何位置删除<application>
来解决问题。当目标是创建另一个任务时,显然最好使用启动模式 - 这不是所需的行为。股票Android掩盖了这种行为,而Android的修改版本与Touchwiz没有。
答案 2 :(得分:0)
它保存当前实例...(它不会销毁它)。 当您再次打开应用程序时,它将重新打开同一个实例。
import android.view.KeyEvent;
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
moveTaskToBack(true);
return true; // return
}
return false;
}