Android: регистрация и отмена регистрации приемника вещания (ACTION_TIME_CLICK) из виджета - PullRequest
1 голос
/ 25 августа 2011

Я зарегистрировал получателя для намерения ACTION_TIME_TICK динамически из виджета. Но через 10/15 минут произошел сбой приложения и устройство перезагрузилось. Ниже приведен код:

@Override
public void onUpdate(Context context) {
        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_TIME_TICK);
        context.getApplicationContext().registerReceiver(mReceiver, intentFilter);
}

Мой широковещательный приемник, с помощью которого я обновляю свой виджет:

    public class WReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //Toast.makeText(context, "[onReceive]", 5).show();
            AppWidgetManager widgetMgr = AppWidgetManager.getInstance(context);
            int [] widgetIds = widgetMgr.getAppWidgetIds(new ComponentName(context, WidgetManager.class));
            //
            for(int appWidgetId : widgetIds) {
                WidgetManager.updateAppWidget(context, widgetMgr, appWidgetId, "World Clock");
            }
    }
      }

Это работает только в течение 15-20 минут. Должен ли я отменить регистрацию получателя, если так, где я должен зарегистрироваться в виджете?

1 Ответ

0 голосов
/ 25 августа 2011

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

РЕДАКТИРОВАТЬ: как указал @haimg (см. http://developer.android.com/reference/android/content/Intent.html#ACTION_TIME_TICK),, это на самом деле должно быть сделано в onEnabled, а не onUpdate. Вы столкнулись с тем, что вы неоднократно регистрировались на Намерение каждый раз, когда onUpdate получал вызывается, а не ровно один раз (что будет делать onEnabled).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...