AppWidget每分钟更新一次

冲天香阵透长安,满城尽带黄金甲。这篇文章主要讲述AppWidget每分钟更新一次相关的知识,希望能为你提供帮助。
我有一个android AppWidget,我想每分钟更新一次。所以在The AppWidgetProvider中我创建了一个重复的闹钟设置,每60秒触发一次。起初看起来很好。在前10分钟左右,它几乎每分钟更新一次。但随后它会放慢速度,每隔3-5分钟才更新一次。我想知道这是否与我设置AppWidget的方式有关,或者我是否错误地初始化了计时器。在减速之后,它似乎也没有定期更新。
的AppWidgetProvider

private PendingIntent service = null; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { startAlarm(context); }@Override public void onEnabled(Context context) { startAlarm(context); }@Override public void onDisabled(Context context) { // TODO: disable alarm }private void startAlarm(Context context) { Log.d(TAG, "Starting alarm"); final AlarmManager m = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); final Intent i = new Intent(context, MyService.class); if (service == null) service = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT); m.setRepeating(AlarmManager.RTC, System.currentTimeMillis() + (1000 * 10), 1000 * 60, service); }

为MyService
@Override public void onCreate() { super.onCreate(); }@Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "Service started"); buildUpdate(); return super.onStartCommand(intent, flags, startId); }private void buildUpdate() {// Do stuff.}@Override public IBinder onBind(Intent intent) { return null; }

这是在我的三星Galaxy S7 API级别23上运行,如果这是相关的。提前致谢!
答案你的targetSdkVersion是什么?从API 19(Kitkat)开始,警报传递不准确:操作系统将移动警报以最小化唤醒和电池使用。
对于精确警报,如果您的targetSdkVersion为19或更高,则必须使用setExact(...)。没有确切版本的setRepeating(...)
对于targetSdkVersion早于API 19的应用程序,setRepeating(...)仍将提供准确的警报。
另一答案【AppWidget每分钟更新一次】实际上,如果每30分钟需要多次更新小部件,那么使用IntentService的最佳方法是更新小部件(警报就可以了)。我在我的library上使用的方法与我在内部和我的项目中使用的小部件相同(因为它会像我可以在每个带有小部件的项目中使用的模式)。实际上我没有发现你的代码有任何问题(也许你可以从你的代码中制作一个小样本项目)。

    推荐阅读