屏幕closures时如何保持我的Android服务运行?

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

我用下面的代码开始我的服务:

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

我怎样才能避免服务暂停?


我在MyService中要做的是从互联网上下载一些数据。 如果我了解了这个过程,我必须遵循的是:

  1. 获取wakeLock
  2. 下载数据
  3. 发布wakeLock

在下载数据方法中没有提到wakeLock,是wakeLock的应用程序,它是正确的吗?

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

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

要获得:

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

释放:

 wakeLock.release(); 

WakeLock还支持引用计数,因此您的服务中可能有多个需要唤醒function的设备,并且设备可以在没有任何设备处于活动状态时进入hibernate状态。

需要注意的事项:

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

此外,请务必短时间内不要频繁地使用WakeLocks。 他们在电池使用方面加起来。 获得你的锁,做你的生意,并尽快释放。

你需要一个部分唤醒锁。

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

唤醒lockingandroid服务重复

我只是使用foregrgound服务。