Подтвердить что ты не робот

Приложение полностью перезагружается при запуске с помощью значка в панели запуска

Я пытаюсь сделать сборку релизов моего первого приложения для Android, чтобы отправить несколько тестеров. Однако я столкнулся с проблемой. Когда вы выходите из приложения, а затем снова вводите его, запустив его через свой значок, он перезапустит все приложение, а не вернет ему прежнее местоположение. Это происходит, даже если вы повторно входите сразу после выхода. Однако этого не происходит, если я удерживаю кнопку "Домой" и запускаю ее через список последних приложений.

Я искал онлайн для других, имеющих эту проблему, и их немного, но никто никогда не имел твердого ответа относительно того, почему это происходит с ними. В старых вопросах было предложено установить стартовый режим в singleletstance или singleinstance в файле манифеста, но это мне не помогло, и, кроме того, из того, что я понимаю, поведение по умолчанию для android заключается в возвращении к предыдущему состоянию задачи в этой ситуации, поэтому я не знаю, зачем мне нужны специальные опции манифеста, чтобы сделать это.

Самая причудливая вещь в этой проблеме заключается в том, что если я использую eclipse и отладчик для установки приложения на свой телефон, эта проблема не возникает. Мне даже не нужно подключаться к отладчику, кажется, что до тех пор, пока у меня есть отладочная версия приложения, проблема не возникает. Но если я использую версию выпуска (я создаю ее, используя опцию меню "Инструменты Android-Экспорт подписанного пакета приложений" в Eclipse), проблема возникает. Если у кого-то есть представление о том, что вызывает это, я бы хотел услышать ваши мысли.

4b9b3361

Ответ 1

У меня была та же проблема с приложением, и я разрешил это поведение добавить флаг "android:launchMode="singleTop"" вместо "android:launchMode="singleTask"" в объявлении <activity> вашего файла AndroidManifest.xml. Надеюсь, это поможет кому-то.

Ответ 2

До сих пор я узнал, что это проблема, основанная на том, как вы устанавливаете ее на своем реальном устройстве, в частности:

  • Если вы просто скопируете и вставьте APK в локальное хранилище своего устройства и установите его с устройства, независимо от того, подписан он или нет или выбран из папки bin, он показывает это поведение, приложение перезапускается из значка меню.

Если вы установите его, используя один из следующих параметров, эта проблема не появляется:

  • Перейдите в sdk/tools/с помощью терминала или командной строки, затем введите

    adb install <FILE PATH OF .APK FILE>
    

    В Linux введите:

    ./adb install <FILE PATH OF .APK FILE>
    
  • Просто запустите проект из Eclipse.

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

Обновление:

Я нашел решение. Выполните следующие два шага:

  • Установите android:launchMode="singleTask" = true для всех действий вашего приложения в AndroidMainifest.xml внутри тега активности.
  • Поместите этот код в свою Launcher Activity onCreate().

    if (!isTaskRoot())
    {
        final Intent intent = getIntent();
        final String intentAction = intent.getAction(); 
        if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
            finish();
            return;       
        }
    }
    

Такое поведение является ошибкой в ​​Android. Это не особый случай.

Ответ 3

Вы можете использовать launchMode как singleTop для запуска Launcher Activity в AndroidManifest.xml

       <activity
        android:name="<YOUR_ACTIVITY>"
        android:label="@string/app_name"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Ответ 4

Другая странная причина: перезапуск происходит только тогда, когда приложение запускается нажатием "ОТКРЫТЬ" после копирования на устройство - & -Install.

Тест на OS8.1, нет режима запуска в действии.

enter image description here

Ответ 5

Это поведение по умолчанию в Android. По какой-то причине для отладочных сборников по-разному работает по-разному. Его можно решить, добавив android:launchMode="singleInstance" к активности, которую вы хотите перезапустить после запуска из значка.

Ответ 6

 // To prevent launching another instance of app on clicking app icon 
        if (!isTaskRoot()
                && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
                && getIntent().getAction() != null
                && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

            finish();
            return;
        }

напишите приведенный выше код в своей активности запуска перед вызовом setContentView. Это решит проблему.

Ответ 7

Попробуйте использовать android:alwaysRetainTaskState, как показано в следующем примере:

<activity
    android:name="com.jsnider.timelineplanner.MainActivity"
    android:alwaysRetainTaskState="true"
    android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Ответ 8

Вы можете попробовать установить android:alwaysRetainTaskState="true" для своей активности запуска в AndroidManifest.xml.

    <activity
        android:name=".YourMainActivity"
        android:alwaysRetainTaskState="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Подробнее см. https://developer.android.com/guide/topics/manifest/activity-element.html#always

Ответ 9

Когда вы нажмете кнопку "Назад" в Android, вызывается метод onDestroy (в отличие от нажатия кнопки "домой", где вызывается только метод onPause()).

Если вам нужно, чтобы ваше приложение продолжалось, где оно было остановлено, сохраните состояние приложения в вашем методе onDestroy() и загрузите это состояние в метод onCreate().

Ответ 10

Добавьте это к первому действию:

if (!isTaskRoot()) {
        finish();
        return;
}     
super.onCreate(savedInstanceState);

Ответ 11

Все вышеперечисленные решения не работали последовательно на всех моих устройствах. Он работал на некоторых Samsung, но не на всех.

Причиной проблемы для меня была установка APK вручную.

Ответ 12

Для меня исправление заключалось в добавлении LaunchMode = LaunchMode.SingleTop к моему атрибуту Activity по главной операции:

/// <summary>
    /// The main activity of the application.
    /// </summary>
    [Activity(Label = "SilhuettePhone",
        Icon = "@drawable/icon",
        Theme = "@style/MainTheme",
        MainLauncher = true,
        ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation,
        ScreenOrientation = ScreenOrientation.Portrait,
        LaunchMode = LaunchMode.SingleTop,
        WindowSoftInputMode = SoftInput.AdjustResize)]

Ответ 13

Я вижу эту проблему на Android TV в 2019 году. Есть ли лучшее решение для этого? Кроме как

if (!isTaskRoot()) {
    finish();
}

Это работает, но выглядит как взломать больше, чем фактическое решение.

Ответ 14

Для меня я обнаружил, что я ошибочно разместил NoHistory = true в своем атрибуте активности

[Activity(NoHistory = true, ScreenOrientation = ScreenOrientation.Landscape)]

Это предотвратило возобновление работы приложения в этом действии и перезапустило