16

在查看 Stackoverflow 中关于WakefulIntentService. 我只是想获得一些关于这个主题的知识,以确保我的理解是正确的,如果我错了,请随时纠正我。

我构建了一个小型应用程序,其中我使用的背景Service是在用户摇动手机时不断播放音乐。我在设备锁定并关闭屏幕后进行了测试,它按预期工作。

  1. 我从这个论坛听到的消息,一旦设备进入睡眠状态,服务可能会关闭。真的吗?就我而言,它总是有效,我错过了什么吗?

  2. 需要什么WakeFulIntentService?我们什么时候需要使用WakefulIntentService

  3. 我尝试在 a 中运行计时器Service,尽管设备已锁定并且屏幕已关闭并且我的计时器正在运行,但我可以肯定地说。因为我曾经在我的计时器跳闸时收到通知。

4

2 回答 2

19

我从这个论坛听到的消息是,一旦设备进入睡眠状态,服务可能会关闭。真的吗?

是的。

就我而言,它总是有效

然后,您设备上的其他东西会阻止设备入睡。也许adb shell dumpsys power用来看看有什么WakeLocks出色的。

WakeFulIntent 服务需要什么?我们什么时候需要使用 WakefulIntentService?

如果用户处于非活动状态并且没有任何东西使设备保持清醒,则设备可能会进入睡眠状态。AWakeLock用于确保设备保持唤醒状态。对于事务类型的工作(例如,下载文件),WakefulIntentService结合 anIntentService和 aWakeLock以使设备在必要时(并且在必要时)保持唤醒相对容易。

WakefulIntentService不适合与需要无限期运行的服务一起使用,例如音乐播放器。对于那些,管理你自己的WakeLock.

于 2013-01-02T19:53:42.223 回答
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" />
于 2013-01-02T19:59:43.800 回答