Что делает в однозадачном действии 2 экземпляра? - PullRequest
0 голосов
/ 15 февраля 2019

В соответствии с документами , в однозадачных действиях не может быть нескольких экземпляров.Единственное действие моего приложения - это singleTask, и оно имеет 2 экземпляра одновременно.

Действия по воссозданию проблемы

Шаг 1

Создание нового проекта в AndroidStudio 3.3.1, Add No Activity, назовите его singleTaskBug (пакет com.example.singletaskbug), используя язык Java с минимальным уровнем API 21 без поддержки мгновенных приложений.

Шаг 2

Добавитьвручную, изменив AndroidManifest.xml, затем создав новый класс Java в appjavacom.example.singletaskbug с именем 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();
    }
}

Шаг 3

Перейти к RunEdit Configurations... и в Launch Options секция установлена ​​Launch: в Specified Activity и Activity: com.example.singletaskbug.LauncherActivity, затем нажмите OK и Run 'app' Shift F10 .

Шаг 4

Подождите, пока активность не станет видимой.Теперь на тестовом устройстве (API 21 в моем случае), перейдите в настройки, чтобы установить это приложение в качестве панели запуска по умолчанию.Затем нажмите кнопку домой.На данный момент вы увидите это в Logcat:

02-15 17:22:01.906 26429-26429/com.example.singletaskbug D/STB: Constructed instance 1.
02-15 17:22:01.916 26429-26429/com.example.singletaskbug D/STB: Created instance 1.
02-15 17:22:24.228 26429-26429/com.example.singletaskbug D/STB: Constructed instance 2.
02-15 17:22:24.248 26429-26429/com.example.singletaskbug D/STB: Created instance 2.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...