小编ten*_*ays的帖子

如何真正每分钟更新一个小部件

我很难过.我知道这个问题已经被回答了一百次,但我没有尝试过.

我的问题:我制作了一个需要在每分钟精确刷新的Android小部件,就像所有时钟小部件一样.(这个小部件告诉我在我的火车离开前剩下多少分钟,一分钟的错误使它无用).

以下是我的尝试以及各自的结果:

  • 我把android:updatePeriodMillis="60000"我的appwidget_info.xml.但是,正如API Docs中所述,"请求的更新updatePeriodMillis不会每30分钟发送一次以上",实际上这就是我的小部件更新的频率.
  • 我试过用了AlarmManager.在我的WidgetProvider.onEnabled:

    AlarmManager am = (AlarmManager)context.getSystemService
            (Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    long now = System.currentTimeMillis();
    // start at the next minute
    calendar.setTimeInMillis(now + 60000 - (now % 60000));
    am.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 60000,
            createUpdateIntent(context));
    
    Run Code Online (Sandbox Code Playgroud)

    然而,正如API文档中所述,"从API 19开始,所有重复警报都是不精确的",实际上我的小部件实际上每五分钟左右更新一次.

  • 基于前一点,我尝试设置targetSdkVersion为18并且没有看到任何差异(每五分钟更新一次).
  • setRepeating文件似乎使用建议setExact.我尝试了以下内容.在我的更新逻辑结束时:

    Calendar calendar = Calendar.getInstance();
    long now = System.currentTimeMillis();
    long delta = 60000 - (now % 60000);
    
    Log.d(LOG_TAG, "Scheduling …
    Run Code Online (Sandbox Code Playgroud)

android scheduled-tasks android-widget

7
推荐指数
1
解决办法
3003
查看次数

标签 统计

android ×1

android-widget ×1

scheduled-tasks ×1