我使用AlarmManager
为每个小部件设置重复警报以进行更新。它在大多数设备上运行良好。
为了在重新启动后重新建立警报,我依赖于onEnabled()
方法,因为对于app小部件组,它会被调用一次。在那里,我有类似的东西:
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int appWidgetIds[] = appWidgetManager.getAppWidgetIds(new ComponentName(context, MyAppWidgetProvider.class));
for (int appWidgetId : appWidgetIds) {
// call function to set the repeating alarm for this widget (including doing a widget update NOW)...
updateAppWidgetAlarm(context, appWidgetId, appWidgetManager, alarmManager);
}
虽然这在大多数情况下似乎运行良好,但似乎对于某些设备onEnabled()
方法根本没有做任何事情。我知道它正在调用,从我输入的一些日志记录中,但没有任何事情发生。
我怀疑appWidgetIds
数组可能是空的,因为在重新启动后的早期时间列表尚未填充。我会进行更多的记录,看看是否正确。
我是否将onEnabled()
用于某些不适合的事情?此时,appWidgetIds
数组是否应始终在应用小部件中包含有意义的内容。生命周期?
我还尝试将上述内容拖延到handler.postDelayed()
内,但结果不确定,推迟了上述内容。