Сподіваюсь, хтось може допомогти мені розібратися, якщо не рішення, то хоча б пояснення поведінки.
Проблема:
На деяких пристроях натискання піктограми запуску призводить до відновлення поточної задачі, на інших це призводить до запуску початкового наміру запуску (ефективно перезапуск програми). Чому це відбувається?
Деталі:
Коли ви натискаєте "Піктограму запуску", програма запускається нормально. Тобто, я припускаю, запускається інтенція з назвою вашого першого Activity
з дією android.intent.action.MAIN
та категорією android.intent.category.LAUNCHER
. Однак це не завжди може бути таким:
Якщо на більшості пристроїв натискаєте піктограму запуску після запуску програми, поточна активність у цьому процесі відновлюється ( НЕ початкова Activity
). Він поновлюється так само, як якщо б ви вибрали його з "Останні завдання" в меню ОС. Такої поведінки я хочу на всіх пристроях.
Однак на вибраних інших пристроях трапляється різна поведінка:
У Motorola Xoom, коли ви натискаєте піктограму запуску, додаток завжди запускатиме початковий запуск
Activity
незалежно від того, що зараз працює. Я припускаю, що піктограми пускового пристрою завжди запускають наміри "LAUNCHER".На вкладці Samsung 2, коли ви натискаєте піктограму запуску, якщо ви тільки що встановили додаток, він завжди запустить початковий
Activity
(Те саме, що і Xoom) - однак, після перезавантаження пристрою після встановлення піктограма запуску замість цього відновити додаток. Я припускаю, що ці пристрої додають "встановлені програми" в таблицю пошуку при запуску пристрою, що дозволяє піктограм запуску правильно відновити запущені завдання?
Я читав багато відповідей, які звучать схоже на мою проблему, але просто додавання android:alwaysRetainTaskState="true"
або використання launchMode="singleTop"
до Activity
не є відповіддю.
Редагувати:
Після останнього запуску цього додатка ми виявляємо, що така поведінка почала відбуватися на всіх пристроях після першого перезавантаження. Що мені здається божевільним, але переглядаючи процес перезавантаження, я фактично не можу знайти те, що відбувається не так.
finish()
їх у тих випадках, коли вона починається спочатку Activity
знову, а не поновлюється.