如何在屏幕关闭时保持Android服务的运行?

时间:2011-05-22 22:34:17

标签: android service

当屏幕关闭时,我的应用程序服务暂停。

我使用以下代码启动我的服务:

if (mSharedPrefs.getBoolean("prefAutoUpdatesMain", false)) {
     Intent svc = new Intent(this, MyService.class);
     startService(svc);
}

如何避免暂停服务?


我在MyService中要做的是从Internet下载一些数据。如果我理解了我必须遵循的过程:

  1. 获取wakeLock
  2. 下载数据
  3. 发布wakeLock
  4. 在下载数据方法时没有引用wakeLock,它是具有wakeLock的应用程序,是否正确?

    默认情况下,唤醒锁是引用计数。我认为没有引用计数更好的wakeLock,一定要释放它,我错了吗?

3 个答案:

答案 0 :(得分:65)

部分WakeLock就是你想要的。即使屏幕关闭,它也会使CPU保持打开状态。

获得:

PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
wakeLock.acquire();

要发布:

wakeLock.release();

WakeLock还支持引用计数,因此您的服务中可能有多个需要唤醒功能的东西,并且当它们都不活动时,设备可以休眠。

需要注意的事项:

如果使用引用计数,请确保通过应用程序的所有控制路径都能正确获取/释放...最后块在这里派上用场。

还要确保不经常短时间握住WakeLocks。他们在电池使用方面加起来。获取锁定,开展业务,并尽快发布。

答案 1 :(得分:3)

你需要部分唤醒锁。

上一个问题中的详细示例:

Wake locks android service recurring

答案 2 :(得分:1)

我只是使用一种前卫的服务。

相关问题