gpt4 book ai didi

android - AlarmManager setExact 与 WakefulBroadcastReceiver 有时不精确

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:51:16 26 4
gpt4 key购买 nike

使用 Android 19+

setExact 与 WakefulBroadcastReceiver 结合使用有时不会按时触发(可能会延迟几秒左右)。我的意思是大多数时候都是这样。大概 50 次中有 49 次是正确的。

不知道是不是只是因为当时系统很忙,无法处理工作量还是什么

我是这样设置闹钟的:

  AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(AlarmReceiver.INTENT_FILTER);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, MyApplication.ALARM_REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, timeToWakeUp, alarmIntent);

这是我的接收者代码:

public class AlarmReceiver extends WakefulBroadcastReceiver {

public static final String INTENT_FILTER = "myfilter";

@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, MyWakefulService.class);
startWakefulService(context, service);

}

}

在 WakefulService 中

public class MyWakefulService extends IntentService {

....

@Override
protected void onHandleIntent(Intent intent) {

....

最佳答案

对于 Marshmallow 时代(?),我们需要一些丑陋的代码,如下所示... :(并且“delayInMillis”参数在 API 23 上应该超过 15 分钟。如果不是,系统忽略小于 15 分钟的分钟数。

private void registerExactAlarm(PendingIntent sender, long delayInMillis) {
final int SDK_INT = Build.VERSION.SDK_INT;
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
long timeInMillis = (System.currentTimeMillis() + delayInMillis) / 1000 * 1000; //> example

if (SDK_INT < Build.VERSION_CODES.KITKAT) {
am.set(AlarmManager.RTC_WAKEUP, timeInMillis, sender);
}
else if (Build.VERSION_CODES.KITKAT <= SDK_INT && SDK_INT < Build.VERSION_CODES.M) {
am.setExact(AlarmManager.RTC_WAKEUP, timeInMillis, sender);
}
else if (SDK_INT >= Build.VERSION_CODES.M) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, timeInMillis, sender);
}
}

关于android - AlarmManager setExact 与 WakefulBroadcastReceiver 有时不精确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24724859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com