在我的项目中,将在服务中启动另一个线程。为避免在设备挂起时暂停此线程,我在启动此线程之前获取了 WakeLock,并在此线程完成后释放此 WakeLock。有时,此 API 调用 (WakeLock.acquire) 需要很长时间,在三星 Galaxy SII LTE 上超过 4 分钟。
下面是我的代码: 在服务 onStartCommand 中,获取唤醒锁:
if (mWakeLock == null) {
final PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Eca Engine");
mWakeLock.setReferenceCounted(false);
}
if (!mWakeLock.isHeld()) {
Log.d(TAG, "Before acquire");
mWakeLock.acquire();
Log.d(TAG, "After acquire");
}
......
在线程中,释放唤醒锁:
if (mWakeLock != null && mWakeLock.isHeld()) {
mWakeLock.release();
}
日志:在“获取之前”超过 4 分钟后打印“获取之后”。
测试设备信息为: 型号:Sc-03d Android版本:2.3.6 基础版本:3c03domlb9 内核版本:2.6.35.11 - 3c03domlb9 980106 se.infra@sep-53#2 Build number:gingerbread omlb9
以前有人遇到过这个问题吗?或者对我的任何建议表示赞赏。