2012-07-30 102 views
1

在我的項目中,另一個線程將在服務中啓動。爲了避免此線程在設備暫停時暫停,我在啓動此線程之前獲取了WakeLock,並在此線程完成後釋放此WakeLock。 有時,此API調用(WakeLock.acquire)花費的時間太長,超過4分鐘Samsung Galaxy SII LTE。WakeLock.acquire在三星Galaxy SII LTE上花費很長時間

下面是我的代碼: 在服務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 [email protected]#2 生成編號:gingerbread omlb9

以前有沒有人遇到過這個問題?或者對我的任何建議表示讚賞。

回答

0

我修復了這個問題。 我向主線程發送命令,讓它釋放喚醒鎖,而不是直接在新線程中釋放它。那麼這個問題不能再現。

有沒有人瞭解根本原因?爲什麼我們無法獲取服務主線程中的喚醒鎖,並在另一個線程中釋放它,即使我們使用相同的WakeLock對象。

+0

不幸的是,這個問題再次被轉載。我檢查過夏普設備,它不會發生。此問題僅在Samsung Galaxy SII設備上發生。 – 2012-08-08 01:11:49

+0

在這個問題上的任何更新?我在三星S6上有相同的... – Dmitry 2015-10-05 16:27:34

相關問題