PendingIntent в виджете + TaskKiller - PullRequest
       17

PendingIntent в виджете + TaskKiller

1 голос
/ 25 апреля 2010

Я разработал приложение (называемое мгновенными кнопками), и приложение имеет функцию виджета. Этот виджет использует PendingIntent для onClick виджета.

Мой код PendingIntent выглядит примерно так:

    Intent active = new Intent(context, InstantWidget.class);
    active.setAction(String.valueOf(appWidgetId));
    active.putExtra("blabla", blabla); //Some data

    PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);

    actionPendingIntent.cancel();
    actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);

    remoteViews.setOnClickPendingIntent(R.id.button, actionPendingIntent);

OnReceive получает намерение и делает некоторые вещи с классом MediaPlayer для воспроизведения звука.

У меня есть сообщения от некоторых пользователей о том, что виджеты перестают работать через некоторое время, и благодаря некоторым исследованиям, которые я обнаружил, это потому, что Task Killers. Кажется, что когда вы убиваете приложение в TaskKiller, PendingIntent стирается из памяти, поэтому, когда вы щелкаете виджет, он не знает, что делать.

Есть ли какое-то решение для этого? Мой код неправильный или что-то в этом роде, или это поведение по умолчанию для PendingIntent? Есть ли что-то, что я могу использовать, чтобы TaskKiller мешал работе моих виджетов ??

Привет.

Ответы [ 2 ]

7 голосов
/ 25 апреля 2010

Есть ли какое-то решение для этого?

Попросите своих пользователей не использовать убийц задач. Или подождите, пока какой-нибудь будущий выпуск Android закроет лазейку для убийцы задач.

Мой код неправильный или что-то или это поведение по умолчанию PendingIntent

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

Есть ли что-то, что я могу использовать, чтобы избежать TaskKiller, чтобы остановить мои виджеты от рабочий?

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

0 голосов
/ 18 октября 2014

У меня была такая же проблема с ожидающими намерениями в виджете, которые больше не подключались к их действиям, когда приложение было закрыто. Создание, отмена и воссоздание работали, но вы также можете указать текущий флаг отмены, чтобы вам не приходилось явно вызывать команду отмены самостоятельно, поскольку система сделает это за вас. Когда вы создаете свое ожидающее намерение вместо использования

PendingIntent.getBroadcast(context, 0, active, 0);

использовать

PendingIntent.getBroadcast(context, 0, active, PendingIntent.FLAG_CANCEL_CURRENT);
...