2015-05-19 6 views
0

я получаю более 20 ошибок с этим сообщ в GoogleAnalytics:.

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, пытающимся освободить WakeLock после 200-секундного таймаута, в то время как метод onStop Fragment вызвал и блокировка была выпущена.

+0

потому что я хочу сохранить экран, но я не хочу, чтобы экран продолжался до выхода пользователя из приложения, поэтому я использую WakeLock, который автоматически освобождается после N * мельниц. – IceJOKER

+0

Это еще один способ сохранить экран в течение N * времени и после того, как пользователь может закрыть приложение или активировать экран вручную. – IceJOKER

+0

@IceJOKER: см. Мой пересмотренный ответ. Я все еще не совсем уверен, почему вы хотели бы удержаться на WakeLock ПОСЛЕ того, как пользователь перешел от вашего приложения? –