首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WakeLock.acquire在三星Galaxy SII LTE上花费了很长时间

WakeLock.acquire在三星Galaxy SII LTE上花费了很长时间
EN

Stack Overflow用户
提问于 2012-07-30 17:34:42
回答 1查看 344关注 0票数 1

在我的项目中,另一个线程将在服务中启动。为了避免此线程在设备挂起时暂停,我在启动此线程之前获取了WakeLock,并在此线程结束后释放此WakeLock。有时,此API调用(WakeLock.acquire)花费的时间太长,在Samsung Galaxy SII LTE上超过4分钟。

下面是我的代码:在服务onStartCommand中,获取唤醒锁:

代码语言:javascript
复制
    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");
    }
    ......        

在线程中,释放唤醒锁:

代码语言:javascript
复制
    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

以前有没有人遇到过这个问题?或者对我的任何建议都很感谢。

EN

回答 1

Stack Overflow用户

发布于 2012-08-03 15:20:07

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

有没有人知道根本原因?为什么我们不能在服务主线程中获取唤醒锁,并在另一个线程中释放它,即使我们在同一个WakeLock对象上操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11718775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档