android - AppWidget每分钟更新一次

标签 android widget alarmmanager android-appwidget

我有一个 Android AppWidget,我想每分钟更新一次。因此,在 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);
}

我的服务

@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;
}

如果相关的话,它正在我的 Samsung Galaxy S7 API 级别 23 上运行。提前致谢!

最佳答案

你的targetSdkVersion是什么?从 API 19 (Kitkat) 开始,警报传递不准确:操作系统将转移警报以最大程度地减少唤醒和电池使用。

对于精确警报,如果您的 targetSdkVersion 为 19 或更高版本,则必须使用 setExact(...)setRepeating(...)

没有确切的版本

对于 targetSdkVersion 早于 API 19 的应用程序,setRepeating(...) 仍将提供准确的警报。

关于android - AppWidget每分钟更新一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48633271/

相关文章:

android - BroadcastReceiver 中的 SharedPreferences 似乎没有更新?

安卓报警管理器 : how to use it to STOP an Activity

android - 如何将 Google API key 限制为 PhoneGap "Android App"

javascript - 从下拉列表中选择多个值

android - 表面 View 中的触摸事件和手势

android - 自定义线性布局

flutter - 为什么 Dart 中的 const Widgets 不相同?

java - SWT 文本小部件的清除状态

Android 闹钟 - 以编程方式删除闹钟

java - OnSuccess 方法内的进度对话框,Firebase-Firestore?