2016-09-08 95 views
0

工作,我已經實現了激活鎖定在我的應用程序下面的代碼:的Android激活鎖定不能在第一次運行

PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE); 
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK,"MyWakelockTag"); 
wakeLock.acquire(); 

我想,以防止屏幕從去關閉時,用戶在我的應用程序。奇怪的是,在應用程序第一次運行時(安裝後)它不起作用,屏幕熄滅,但之後,如果我關閉應用程序並再次運行應用程序,則wakelock可以正常工作並阻止應用程序關閉。
我注意到,在我第一次在我的日誌出現此錯誤:

WakeLock finalized while still held: MyWakelockTag 

但在接下來的運行我沒有得到這個錯誤,一切正常。

我在第一次運行時沒有得到什麼原因導致此問題,如果有人能幫助我解決這個問題,我將不勝感激。
謝謝

+0

讓我看看你的整個代碼,因爲如果上述代碼存在問題,則不會再次運行。它的定位有一些問題。編輯你的問題把整個活動找出問題。 –

+0

是否增加了此權限? '<使用權限android:name =「android.permission.WAKE_LOCK」/>' –

+0

@SyedDaniyalNasir謝謝,我確定我的代碼在每次運行時調用,但我注意到在第一次運行時我得到這個錯誤:WakeLock finalized雖然仍然舉行:MyWakelockTag 但我不明白在下次運行 – m0j1

回答

0

好的我相信我發現了這個問題。

WakeLock是參考計數。這意味着如果發生第二次獲取(),它將會引起參考計數。必須通過調用作爲保護,isHeld()每次調用獲得():

if ((keepScreenOn != null) && (keepScreenOn.isHeld() == false)) { 
keepScreenOn.acquire(); 
} 

我曾以爲,採集()對我持有什麼也沒做一個鎖,以便多獲取()的調用導致的問題。由於引用計數不爲零,GC會拋出錯誤。

0

我在申請中的第一次運行得到的錯誤是:

WakeLock finalized while still held: MyWakelockTag 

解決的辦法是添加此行的onDestroy:

if(wakeLock.isHeld()){ 
wakeLock.release(); 
} 
相關問題