Как сохранить один экземпляр активности, но иметь возможность обновлять представление?

В моей ситуации есть один случай, когда мне нужно убедиться, что активность выполняется только по одной за раз.

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

Это действие запускается startActivityForResult, и мы отправляем URI с намерением для действия.

Давайте обсудим этот конкретный случай:

  • галерея — запустите эту активность с помощью imageA.

  • камера - запустите это действие с помощью imageB.

Моя просьба состоит не в том, чтобы уничтожить старую активность, а в том, что активность, которая только что получила новую информацию о намерениях, должна обновить представление.


Я нашел новый метод, onNewIntent. Этот метод может обновить намерение перед возобновлением. Я попробую.


person johnsonYu    schedule 15.11.2011    source источник
comment
Почему так важно, чтобы деятельность оставалась живой? Я думаю, что это невозможно.   -  person Jordi Coscolla    schedule 15.11.2011
comment
это потому, что если есть два экземпляра активности, это вызовет некоторые проблемы в нашем приложении. поэтому мне нужно убедиться, что это единственный экземпляр.   -  person johnsonYu    schedule 15.11.2011


Ответы (2)


У вас может быть действие с атрибутом манифеста singleInstance. Как только активность перезапускается, вызывается onResume. Вы можете обновить представление новым изображением и аннулировать старое представление.

<activity ..
      android:launchMode= "singleInstance" />
person Rajdeep Dua    schedule 15.11.2011
comment
информация о моем изображении хранится в Intent. но я получаю информацию о намерениях с помощью getIntent(), которая является старой. может быть, это ключевой вопрос. Спасибо за ваш ответ. - person johnsonYu; 15.11.2011
comment
Есть ли способ установить действие в стеке действий задач, которое запускает действие. ‹activity .. android:launchMode= singleInstance /› ; этот метод запустит новую задачу с действием. - person johnsonYu; 15.11.2011
comment
С другой стороны, действие singleInstance не позволяет никаким другим действиям быть частью его задачи. Это единственное действие в задаче. Таким образом, используйте android:launchMode=singleTask. - person Kaveesh Kanwal; 11.03.2015

В манифесте используйте android:launchMode="singleTask" вместо android:launchMode="singleInstance". Использование singleInstance возвращает к существующему экземпляру только в том случае, если он находится на вершине стека. singleTask, с другой стороны, возвращается к существующему экземпляру действия, так как он всегда находится в корне задачи.

Затем, когда ваш экземпляр будет запущен, переопределите onNewIntent, чтобы обновить пользовательский интерфейс в соответствии с новым намерением.

Дополнительные сведения см. в документации Andorid.

person vividh    schedule 02.12.2012
comment
Я согласен с тем, что оба режима допускают только один экземпляр Activity, но ваша интерпретация разницы неверна. - person ben75; 17.06.2014