gpt4 book ai didi

android - AlarmManager 启动服务时的唤醒锁

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:53:34 27 4
gpt4 key购买 nike

Android 的 AlarmManager Javadoc 声明

当警报响起时,系统会广播为其注册的 Intent,

Android 提供的 API 演示中有一个 AlarmService(包 com.example.android.apis.app),它演示了 AlarmService 的使用。

其中包含以下内容(为清楚起见进行了编辑):

PendingIntent mAlarmSender = PendingIntent.getService(AlarmService.this,
0, new Intent(AlarmService.this, AlarmService_Service.class), 0);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 30*1000, mAlarmSender);

所以在这个例子中它没有执行 PendingIntent mAlarmSender = PendingIntent.getBroadcast(...); 而是执行了 Javadoc 从未提及的 getService .

我问这个问题的原因是因为 CPU 唤醒锁的影响。 Javadoc 说一旦广播接收器的 onReceive() 返回,AlarmManger 的唤醒锁就会被释放。

我想知道的是,如果您像示例中那样使用闹钟,唤醒锁会产生什么影响? Javadoc 似乎没有解决这个问题。如果有的话,它似乎暗示您在设置警报时必须使用广播技术。

最佳答案

What I am wondering is what are the wake lock implications if you use an Alarm like in the example?

无法保证您的服务会在设备休眠之前获得控制权。

If anything it seems to imply that you must use the broadcast technique when setting alarms.

对于 _WAKEUP 警报,是的,因为这是我们保证在设备仍处于唤醒状态时获得控制权的唯一途径。

由于 _WAKEUP 警报要完成的工作通常超出您可以在 list 注册的 onReceive() 中安全执行的范围BroadcastReceiver,一种常见的模式是将工作委托(delegate)给 IntentService。为此,我打包了WakefulIntentService , 以实现将控制权安全地传递给 IntentService 并保持设备唤醒足够长的时间以便服务完成其工作的模式。

关于android - AlarmManager 启动服务时的唤醒锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151289/

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