Я разрабатываю живые обои для Android.Для обновления обоев в установленное время я использую AlarmManager.В большинстве случаев это прекрасно работает, но иногда мой сигнал тревоги не получен.Кроме того, я не могу воспроизвести это поведение, это происходит случайно.Я столкнулся с этим, используя как минимум 3 ПЗУ.
Теперь для кода.
Я использую это PendingIntent:
mRefreshIntent = new Intent()
.setComponent(new ComponentName(mContext, RefreshBroadcastReceiver.class))
.setAction("my.package.name.REFRESH_WALLPAPER");
mPendingRefreshIntent = PendingIntent.getBroadcast(
mContext,
0,
mRefreshIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
Это мой код для установки будильника:
mAlarmManager.set(AlarmManager.RTC_WAKEUP, time, mPendingRefreshIntent);
где время - время UTC в миллисекундах.Я часто проверял, установлен ли будильник, как предполагалось, используя adb shell dumpsys alarm
, что и есть.
Принимающая сторона:
public class RefreshBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("DayNight", "onReceive ; " + System.currentTimeMillis());
DayNightService.refresher.refresh();
Log.d("DayNight", "onReceive done; " + System.currentTimeMillis());
}
}
Связанные строки манифеста:
<application>
...
<receiver
android:name="RefreshBroadcastReceiver">
<intent-filter>
<action android:name="my.package.name.REFRESH_WALLPAPER" />
</intent-filter>
</receiver>
...
</application>
Аварийные сигналы, которые не сработали, всегда существуют в очереди (аварийные сообщения dumpsys) заранее, а впоследствии не заносятся в журнал аварийных сигналов.Похоже, они «теряются» при Т минус ноль.
Я буду очень рад, если один из вас сможет решить эту проблему для меня.