Режим запуску Android singleTask або singleInstance? [зачинено]


84

У мене є програма, основною діяльністю якої є список, а потім ви можете натискати елементи, що відкриває детальний огляд цього елемента. У мене також є пошукова діяльність, яка схожа на основну діяльність і працює за призначенням.

Однак я хочу, щоб ця пошукова діяльність мала лише один раз екземпляр у стеку, щоб користувачі могли здійснювати пошук кілька разів, і клацання назад поверне їх до попереднього подання, яке вони використовували до початку пошуку (а не повертаються до попередніх результатів пошуку)

як режим запуску singleTask, так і singelInstance, здається, робить те, що я хочу, тому я не впевнений, який із них мені слід використовувати для цієї мети і чому?

Відповіді:


141

На сторінці Основи програм посібника розробника Android:

За замовчуванням усі дії в програмі мають спорідненість одна з одною - тобто існує перевага, щоб усі вони належали до одного завдання.

Діяльність "singleInstance" виокремлюється як єдина діяльність у своєму завданні. Якщо він розпочне іншу діяльність, ця діяльність буде запущена в інше завдання, незалежно від режиму його запуску, - ніби FLAG_ACTIVITY_NEW_TASK мав намір. У всьому іншому режим "singleInstance" ідентичний "singleTask".

Як зазначалося вище, ніколи не існує більше одного екземпляра діяльності "singleTask" або "singleInstance", тому цей екземпляр повинен обробляти всі нові наміри. Діяльність "singleInstance" завжди знаходиться у верхній частині стека (оскільки це єдина діяльність у завданні), тому вона завжди в змозі обробляти намір. Однак діяльність "singleTask" може мати або не мати в стеці інших дій, що перевищують її. Якщо це сталося, він не в змозі обробити намір, і намір відкидається. (Навіть незважаючи на те, що намір відмовляється, його прибуття призвело б до того, що завдання вийшло на перший план, де воно і залишилось би).

4 Діяльність у завданні

Оскільки в будь-якому з режимів запуску ніколи не існує більше одного екземпляра Діяльності, кнопка "Назад" завжди переведе Вас до існуючого екземпляра Діяльності у Вашому випадку.

Важливою відмінністю є те, що "singleTask" не вимагає створення нового завдання для нових дій, що запускаються, коли щось вибрано. Також не доведеться щоразу видаляти це нове завдання на кнопці "Назад".

Оскільки ваш стек Activity стосується всього одного "завдання" користувача, і це не схоже на те, що у вас складна структура Intent, де singleInstance може бути корисним завжди обробляти їх, я б запропонував використовувати режим запуску singleTask.

Ось хороший допис у блозі для отримання додаткової інформації, а також заслуги за зображення: Серія Android and Tasks - Вступ до моделі компонента інтерфейсу користувача Android


4
Дякую! схоже на хороше читання ... річ у тому, що iv усвідомив, що я насправді ХОЧУ багаторазовий екземпляр діяльності, і лише тоді, коли основним завданням є пошукова діяльність та виконується інший пошук, він повинен використовувати цю існуючу діяльність (наприклад, як працює ринок) І за це singeTop - це саме те, що мені потрібно, але все одно дякую за допомогу =) спасибі
Kman

1
Гей, дякую. Ця добре написана публікація мені дуже допомогла.
icecreamman

Дякую за подробиці, особливо цю (Навіть незважаючи на те, що намір відмовлено, його прибуття спричинило б завдання вийти на перший план, де воно і залишилось би.) , Що моментально очищає мою плутанину. Я просто думав про те, що, якщо singleTask Activity не знаходиться у верхній частині стека, поки я все ще хочу перейти до нього, не вказуючи FLAG_ACTIVITY_CLEAR_TOP .
neevek

Необхідно прочитати " androidsrc.net/android-activity-launch-mode-example "
Dhiraj Himani

30

Простим способом-

singleTask:

Система створює нове завдання та створює екземпляр діяльності у корені нового завдання. Однак, якщо екземпляр діяльності вже існує в окремому завданні, система направляє намір до існуючого екземпляра через виклик його onNewIntent()методу, а не створює новий екземпляр. Одночасно one instanceможе існувати лише діяльність.

Примітка: Хоча діяльність починається з нового завдання, кнопка Назад все одно повертає користувача до попередньої діяльності.

singleInstance-

Так само "singleTask", за винятком того, що система не запускає жодних інших дій у завданні, що містить екземпляр . Діяльність завжди є єдиним і єдиним учасником її завдання; будь-які заходи, розпочаті цим, відкриваються в окремому завданні .


4

singleTaskі singleInstanceдіяльність може лише розпочати завдання. Вони завжди знаходяться в основі стеку активностей. Більше того, пристрій може одночасно містити лише один екземпляр активності - лише одне таке завдання.
для більш android: launchMode .


1
останнє речення справедливо для singleInstance, а не singleTask
Serdar Samancıoğlu

@SerdarS. вдячний за ваш коментар. Додавання додаткових відомостей про singleTask- система створює нове завдання та створює екземпляр діяльності у корені нового завдання. Однак, якщо екземпляр діяльності вже існує в окремому завданні, система направляє намір до існуючого екземпляра через виклик його onNewIntent()методу, а не створює новий екземпляр. Одночасно може існувати лише один екземпляр діяльності. для більше developer.android.com
Рупеш Ядав

Зрозумів, тоді я помилявся. Вибачте, що потурбувався.
Serdar Samancıo 15lu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.