2015-05-19 74 views
0

我獲得超過20個錯誤與味精Google分析:

RuntimeException (@android.os.PowerManager$WakeLock:release:***) 

的Android OS 2.3 *

,誰受得了解釋我 - 如何解決問題&爲什麼應用程序崩潰?

我的代碼:

private PowerManager.WakeLock wakeLock; 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    PowerManager pm = (PowerManager) activity.getSystemService(Context.POWER_SERVICE); 
    wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "chat"); 
} 
@Override 
public void onStart() { 
    super.onStart(); 
    wakeLockToggle(true); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    wakeLockToggle(false); 
} 
    private void wakeLockToggle(boolean on){ 
    if(wakeLock == null) return; 
    try { 
     if(on && !wakeLock.isHeld()){ 
      wakeLock.acquire(200000); 
     } 

     if(!on && wakeLock.isHeld()) { 
      wakeLock.release(); 
     } 
    }catch(Throwable ignore){} 

} 

有什麼不對,我沒有?

回答

0

在內部使用獲取超時值會導致WakeLock獲取該鎖,然後使用超時值將延遲過帳到處理程序的調用release()。

我懷疑這個錯誤消息與WakeLock處理程序試圖在200秒超時後釋放WakeLock相關,同時您的Fragment的onStop方法已經調用並釋放了鎖。

+0

因爲我想保持屏幕,但我不想保持屏幕上,直到用戶退出的應用程序,因此我使用喚醒後,N *磨機自動釋放。 – IceJOKER

+0

在N *時間內以及用戶關閉應用程序或手動激活屏幕後,屏幕是否保持另一種方式 – IceJOKER

+0

@IceJOKER:請參閱我的修訂答案。我仍然不完全確定爲什麼你想在用戶離開你的應用程序之後繼續使用WakeLock? –