【发布时间】:2012-07-30 09:34:41
【问题描述】:
在我的项目中,服务中将启动另一个线程。为避免在设备挂起时暂停此线程,我在启动此线程之前获取了 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 安卓版本:2.3.6 基于版本:3c03domlb9 内核版本:2.6.35.11 - 3c03domlb9 980106 se.infra@sep-53#2 内部版本号:姜饼 omlb9
以前有人遇到过这个问题吗?或者对我的任何建议表示赞赏。
【问题讨论】: