在完成问题后,我有点困惑。 Stackoverflow中关于WakefulIntentService
的答案。我只想获得一些关于这个主题的知识,以确保我的理解是正确的,如果我错了,请随时纠正我。
我构建了一个小应用程序,我使用的是后台Service
,可以在用户摇动手机时继续播放音乐。我在设备锁定并关闭屏幕后进行了测试,并且按预期工作。
我从this forum听到的消息,一旦设备进入睡眠状态,服务可能会关闭。真的吗?在我的情况下,它始终有效,我错过了什么?
WakeFulIntentService
有什么需要?我们什么时候需要使用WakefulIntentService
?
我尝试在Service
中运行计时器,虽然设备已锁定且屏幕已关闭且我的计时器正在运行,我可以肯定地说。因为我曾经在计时器绊倒时收到通知。
答案 0 :(得分:18)
我从这个论坛听到的消息,一旦设备进入睡眠状态,服务可能会关闭。这是真的吗?
是
就我而言,它始终有效
然后设备上的其他内容会让设备无法入睡。也许可以使用 adb shell dumpsys power
来查看WakeLocks
的优秀内容。
WakeFulIntent服务的需求是什么?我们什么时候需要使用WakefulIntentService?
如果用户处于非活动状态且没有任何设备保持唤醒状态,设备可能会处于睡眠状态。 WakeLock
用于确保设备保持清醒状态。对于事务类型的工作(例如,下载文件),WakefulIntentService
组合了IntentService
和WakeLock
,以便在必要时保持设备唤醒(并且仅 只要有必要)相对容易。
WakefulIntentService
不适合与需要无限期运行的服务一起使用,例如音乐播放器。对于那些人,管理自己的WakeLock
。
答案 1 :(得分:11)
我在应用中使用了以下代码。
确保您的服务具有粘性:
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
//this service will run until we stop it
return START_STICKY;
}
我希望你的手机能够保持清醒,你可以使用下面的代码:
private WakeLock wl;
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "whatever");
wl.acquire();
不要忘记清单中的权限。
<uses-permission android:name="android.permission.WAKE_LOCK" />