У меня есть виджет, который должен запускать приемник вещания при его создании.
Этот приемник обрабатывает обновление виджета при смене батареи.
Это мой код:
AppWidgetProvider код:
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
broadcastReceiver = new BatteryInfo();
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
context.getApplicationContext().registerReceiver(broadcastReceiver, mIntentFilter);
}
BroadcastReceiver код
public class BatteryInfo extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
// some actions...
}
}
Это работает правильно после добавления виджета. Вызывается onUpdate виджета, затем вызывается приемник при изменении состояния батареи.
Проблема начинается после перезагрузки устройства. После того, как устройство снова включено, через несколько секунд виджет повторно инициализирует себя, снова вызывается onUpdate виджета, затем вызывается получатель дважды и мгновенно умирает. Это появляется в logcat сразу после этого:
1950-3391/? I/ActivityManager: Process [my process name] (pid 7752) has died: cch+4CEM
1950-2013/? W/BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.ACTION_POWER_DISCONNECTED flg=0x4000010 (has extras) } to [my process name]/.BatteryInfo
1950-2013/? W/BroadcastQueue: Background execution not allowed: receiving Intent { act=android.intent.action.ACTION_POWER_CONNECTED flg=0x4000010 (has extras) } to [my process name]/.BatteryInfo
Почему это важно, если виджет был переинициализирован после перезагрузки?
Как я могу гарантировать, что мой приемник остается живым, пока виджет на экране?