根据docs,singleTask活动不能有多个实例。我的应用程序唯一的活动是singleTask,它同时具有2个实例。
在Java Studio中使用最低API级别21的Java语言在不支持即时应用的情况下,在Android Studio 3.3.1中创建一个新项目,不添加任何活动,将其命名为singleTaskBug(程序包com.example.singletaskbug
)。
手动编辑新活动,方法是编辑AndroidManifest.xml
,然后在名为app
的{{1}}⯈java
named com.example.singletaskbug
中创建一个新的Java类。
LauncherActivity
的内容:
AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".LauncherActivity"
android:excludeFromRecents="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
的内容:
LauncherActivity.java
转到package com.example.singletaskbug;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
public class LauncherActivity extends Activity {
static int instanceCounter = 0;
final int instanceId;
final String TAG = "STB";
public LauncherActivity() {
instanceId = ++instanceCounter;
Log.d(TAG, "Constructed instance " + instanceId + ".");
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "Created instance " + instanceId + ".");
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d(TAG, "New intent to instance " + instanceId + ".");
}
@Override
protected void onDestroy() {
Log.d(TAG, "Destroyed instance " + instanceId + ".");
super.onDestroy();
}
}
⯈Run
,然后在Edit Configurations...
部分中将Launch Options
设置为Launch:
和Specified Activity
Activity:
,然后单击com.example.singletaskbug.LauncherActivity
和OK
Shift F10 。
等待直到活动可见。现在,在测试设备(本例中为API 21)上,转到设置将此应用设置为默认启动器。然后按主页按钮。此时,您将在Logcat中看到以下内容:
Run 'app'
答案 0 :(得分:0)
一个 Android 应用程序可以有多个任务。每个任务可以有多个活动。 singleTask
和 singleInstance
控制任务内 Activity 的行为(其唯一性),但可能会发生应用程序具有两个或多个内部具有相同 Activity
的任务。
这是这里实际看到的内容,一个包含两个任务的应用程序,其中包含一个 LauncherActivity
,每个任务一个。作为解决方法,请确保应用程序中始终只有一项任务。在 LauncherActivity
onCreate
上添加:
val appTasks = getSystemService(ActivityManager::class.java).appTasks
if (appTasks.size >= 2) {
appTasks.dropLast(1).forEach { it.finishAndRemoveTask() }
appTasks.last().moveToFront()
return
}