【问题标题】:WakeLock.acquire takes long time on Samsung Galaxy SII LTEWakeLock.acquire 在三星 Galaxy SII LTE 上需要很长时间
【发布时间】: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

以前有人遇到过这个问题吗?或者对我的任何建议表示赞赏。

【问题讨论】:

    标签: galaxy wakelock


    【解决方案1】:

    我已经解决了这个问题。 我向主线程发送一个命令,让它释放唤醒锁,而不是直接在新线程中释放它。那么这个问题就不能再重现了。

    有人了解根本原因吗?为什么我们在同一个 WakeLock obj 上操作,却无法在服务主线程中获取唤醒锁并在另一个线程中释放它。

    【讨论】:

    • 很遗憾,这个问题再次重现。我检查了夏普设备,它没有发生。此问题仅在三星 Galaxy SII 设备上出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2020-08-26
    相关资源
    最近更新 更多