1

我正在编写一个需要经常更新的 Android AppWidget(是的,我知道,不应该那样做,无论如何......)。我希望它仅在可见时才更新,但令人讨厌的是似乎没有类似于WallpaperService.Engine.onVisibilityChanged(boolean visible).

这里建议的方法是设置一个警报,每毫秒AlarmManager.setRepeating(AlarmManager.RTC, firstShot, interval, pendingIntent)触发一次更新。interval这至少不会在设备处于睡眠状态时唤醒设备。

我就是这么做的。我的PendingIntent样子是这样的:

final Intent intent = new Intent(context, CountdownWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);

final PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

CountdownWidgetService每次被警报触发时都会记录一条消息。即使设备应该处于睡眠状态,日志消息也会显示 - 但这正是我认为不应该发生的事情。我的错误在哪里?

4

1 回答 1

1

也许您拥有的其他一些应用程序正在唤醒设备,并且您的警报会随之执行。如果你使用AlarmManager.RTC它意味着:'如果设备唤醒则执行或等到它唤醒然后执行'。检查 logcat 以查看发生了什么,并使用此命令查看注册了哪些其他警报:

adb shell dumpsys alarm
于 2012-05-25T01:44:15.220 回答