Когда необходимо использовать режим запуска SingleTop в виджете или приложении Android?

StackOverflow https://stackoverflow.com/questions/3268962

Вопрос

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

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

На отладку у меня ушла почти два дня.

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top