在我的项目中,另一个线程将在服务中启动。为了避免此线程在设备挂起时暂停,我在启动此线程之前获取了WakeLock,并在此线程结束后释放此WakeLock。有时,此API调用(WakeLock.acquire)花费的时间太长,在Samsung 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内部版本号: gingerbread omlb9
以前有没有人遇到过这个问题?或者对我的任何建议都很感谢。
发布于 2012-08-03 15:20:07
我已经解决了这个问题。我向主线程发送一个命令,让它释放唤醒锁,而不是直接在新线程中释放它。那么这个问题就不能再出现了。
有没有人知道根本原因?为什么我们不能在服务主线程中获取唤醒锁,并在另一个线程中释放它,即使我们在同一个WakeLock对象上操作。
https://stackoverflow.com/questions/11718775
复制相似问题