Запуск нескольких экземпляров одного и того же действия из службы - PullRequest
2 голосов
/ 30 сентября 2011

Я хочу запустить несколько экземпляров одного и того же Activity класса из Service.Причина, по которой я это делаю, заключается в том, что у меня Service, который ежедневно выполняет «сканирование», и если он обнаруживает какие-либо неисправности, он должен отображать всплывающее окно для каждой неисправности.

Activity, которыйЯ начинаю больше похоже на Dialog, имеет Dialog theme для отображения информации о неисправности.

Manfiest:

<activity
   android:name=".ui.dialogs.MalfunctionActivity"
   android:theme="@style/MyDialog"
   android:launchMode="standard">

Намерение начать действие с Service:

    Intent displayMalf=new Intent(this, MalfunctionActivity.class);
    displayMalf.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(displayMalf);

ПРОБЛЕМА: чтобы начать Activity с Service Мне нужен FLAG_ACTIVITY_NEW_TASK, который каким-то образом отменяет launchMode="standard" из манифеста и дает мне простоодин Activity, даже если я пытаюсь запустить несколько разных экземпляров.Есть ли способ, которым я могу достичь этого?

Ответы [ 3 ]

6 голосов
/ 30 сентября 2011

Это было так просто.Существует флаг FLAG_ACTIVITY_MULTIPLE_TASK, который в соответствии с документацией:

Используется вместе с FLAG_ACTIVITY_NEW_TASK, чтобы отключить поведение вывода существующей задачи на передний план.Когда установлено, всегда запускается новая задача для размещения действия для намерения, независимо от того, существует ли уже существующая задача, выполняющая ту же самую вещь.

Это именно то, что мне нужно.Спасибо и извините за ответ на мой вопрос.Это не привычка.:)

2 голосов
/ 30 сентября 2011

Служба примет флаг FLAG_ACTIVITY_NEW_TASK, чтобы начать действие, но здесь вы можете попробовать вот так:

  1. Установите instance of the handler действия, для которого вы хотите создать несколько экземпляров, в сервисе.

  2. Если вы хотите, чтобы новый экземпляр действия использовал handler.sendMessage(msg) и, получив это сообщение в своей активности, запустите это действие снова.

0 голосов
/ 30 сентября 2011

Полагаю, ваше приложение работает в фоновом режиме и будет отображать всплывающие окна, даже если в данный момент приложение не находится на переднем плане, верно?

В противном случае я бы использовал обычные всплывающие окна (AlertViews) вместо того, чтобы постоянно начинать новые действия.

Если приложение работает в фоновом режиме, вы можете сообщить пользователю в первом всплывающем окне, что в вашем приложении обнаружена одна или несколько неисправностей, и что ему следует активировать приложение для получения более подробной информации

...