Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 广播接收机、服务和唤醒锁_Android_Wakelock_Android Wake Lock - Fatal编程技术网

Android 广播接收机、服务和唤醒锁

Android 广播接收机、服务和唤醒锁,android,wakelock,android-wake-lock,Android,Wakelock,Android Wake Lock,我在广播接收机中接收到一个意图,然后我开始服务,做更多的工作。现在,如果设备处于睡眠状态,并且发生这种情况,我是否必须获得Wakelock(AlarmManger?),为什么我需要它? 如果设备进入睡眠状态而未获得唤醒锁,我的服务是否会停止运行 现在,如果设备处于睡眠状态,并且发生这种情况,我是否必须获得Wakelock(AlarmManger?),为什么我需要它 如果设备一开始处于休眠状态,您将不会“在广播接收器中接收到意图”,因为设备处于休眠状态 我必须获得Wakelock(AlarmMan

我在广播接收机中接收到一个意图,然后我开始服务,做更多的工作。现在,如果设备处于睡眠状态,并且发生这种情况,我是否必须获得Wakelock(AlarmManger?),为什么我需要它? 如果设备进入睡眠状态而未获得唤醒锁,我的服务是否会停止运行

现在,如果设备处于睡眠状态,并且发生这种情况,我是否必须获得Wakelock(AlarmManger?),为什么我需要它


如果设备一开始处于休眠状态,您将不会“在广播接收器中接收到意图”,因为设备处于休眠状态

我必须获得Wakelock(AlarmManger?),为什么我需要它

你不“需要它”,除非你想确保设备在你完成一些工作时保持运行

如果设备进入睡眠状态而未获得唤醒锁,我的服务是否会停止运行

查看上面的代码..将其放在一个单独的类文件中,并在清单中为一些自定义目的定义它。。。。现在,该类将响应自定义意图…只需广播该意图,您就可以在整个应用程序中打开或关闭wakelock,因为wakelock是静态的。如下所示:

public void setWakeup(boolean status) {
    Intent wakelock_Intent = new Intent(CUSTOM_INTENT);
    wakelock_Intent.putExtra("on", status);
    this.sendBroadcast(wakelock_Intent);
}

上面的内容将在alarmmanager代码中定义,因此它会安排一个调用

看起来Android的本机将是一个完美的解决方案。需要扩展此服务,而不是常规的BroadcastReceiver,并以“wakeful”方式在onReceive()中启动服务:

并在服务的onHandleIntent()中发出工作已完成的信号,调用

MyWakefulReceiver.completeWakefulIntent(intent);

对于第一部分,我的意思是我将从C2DM接收一个意图,我想您可以在设备处于睡眠状态时接收它。然后我想运行一个服务,我想我必须让wakelock保持它运行。这些假设是否正确?@Fevos:“我的意思是我将从C2DM接收一个意图,我想你可以在设备处于睡眠状态时接收到它。”——是的,C2DM使用无线数据套接字连接(AFAIK),该连接上的传入数据包将短暂唤醒设备。“然后我想运行一个服务,我想我必须让wakelock保持它运行。这些假设正确吗?”--是的,你需要自己的
wakelock
。如果设备一开始就处于休眠状态,你将不会“在广播接收器中接收到意图”,因为设备处于休眠状态。“记录在哪里?”@MarianPaździoch:“记录在哪里?”——我怀疑它是否是专门记录的,部分原因是它很明显。如果CPU没有执行指令,则不会处理任何人的广播
Intent
。欢迎您阅读
PowerManager
PowerManager.WakeLock
上的文档,以了解有关CPU状态的更多信息。@commonware我不会在Android的上下文中使用“显而易见”一词:)。因此,如果BroadcastReceiver很明显保持了设备部分唤醒锁定,那么IntentService是否也明显保持了设备部分唤醒锁定?您确定在卸载接收器
class
时不会擦除此“静态锁定”吗?请参阅:我假设该对象不会被垃圾收集,因为它不是匿名广播接收器。如果我自己分配这个对象并保持对它的硬引用,为什么系统会释放它?这是一个有趣的话题,请提出建议。
startWakefulService(context, service);
MyWakefulReceiver.completeWakefulIntent(intent);