屏幕closures时如何保持我的Android服务运行?
当屏幕closures时,我的应用程序服务暂停。
我用下面的代码开始我的服务:
if (mSharedPrefs.getBoolean("prefAutoUpdatesMain", false)) { Intent svc = new Intent(this, MyService.class); startService(svc); }
我怎样才能避免服务暂停?
我在MyService中要做的是从互联网上下载一些数据。 如果我了解了这个过程,我必须遵循的是:
- 获取wakeLock
- 下载数据
- 发布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服务。