Когда необходимо использовать singleTop launchMode в виджете или приложении для Android? - PullRequest
24 голосов
/ 17 июля 2010

Я только что сгорел от виджета. Я мог видеть причину проблемы, но я не мог определить, почему или ее решение. Мой виджет выполнял поиск (SearchManager), и действие запустило диалоговое окно поиска, но когда он перезвонил моему виджету, он создал другую ссылку на виджет (т. Е. Идентификатор потока был таким же, но идентификатор виджета изменено с 65 на 0).

Это заставило меня поверить, что создается новый экземпляр, и я искал в документации параметры, которые будут относиться к проблеме. В конце концов, я наткнулся на android:launchMode="singleTop", и как только я установил его в AndroidManifest, альт! Мой виджет работал.

Мне потребовалась лучшая часть двух дней для отладки.

Есть ли другие ситуации или есть более технически правильный ответ на мою проблему?

1 Ответ

38 голосов
/ 19 июля 2010

Я больше читал в Android Docs - я мог потратить целую жизнь, читая их документы, и найти новую тонкую деталь, которая ломает мне мозг :) Это объясняет мои множественные случаи, которых я не ожидал, однако я настроил появление.

Документ Android для определения активности для AndroidManifest.xml

Режимы "стандартный" и "одиночный" отличаются друг от друга только в одном отношении: каждыйКогда для «стандартного» действия появляется новое намерение, создается новый экземпляр класса, отвечающий на это намерение.Каждый экземпляр обрабатывает одно намерение.Аналогичным образом, новый экземпляр действия «singleTop» также может быть создан для обработки нового намерения.Однако, если целевая задача уже имеет существующий экземпляр действия на вершине своего стека, этот экземпляр получит новое намерение (в вызове onNewIntent ());новый экземпляр не создан.В других обстоятельствах, например, если существующий экземпляр действия «singleTop» находится в целевой задаче, но не на вершине стека, или если он находится на вершине стека, но не в целевой задаче, -новый экземпляр будет создан и помещен в стек.

...