2011-02-19 2 views
1

wakelocks에 문제가 있습니다. 기본적으로, 나는 나의 타이머 스레드, 내 애플 리케이션의 전체 기간 동안 AsyncTask의 doInBackground (그것은 성능 측정을위한 배경 응용 프로그램입니다)에서 실행하는 wockelock했다. 그런 다음 화면을 10 분마다 1 초 정도 깨워야한다고 결정했습니다. 그래서 AsyncTask를 확장하고 doInBackground에 아래 코드를 추가하는 다른 클래스를 만들었지 만 화면이 다시 켜지지 않습니다. 이 스레드와 onCreate의 doInBackground 메서드를 사용하여 AsyncTask 인 두 개의 다른 스레드를 시작한다는 점에 유의해야합니다.Android - Wakelock 스레드가 화면을 켜지 않습니다.

여기 내 새로운 내부 클래스가 깨어나고있다. 기본적으로 내 모든 두 개의 배경 스레드가 자신의 불리언을 설정할 때까지 잠깐 10 분마다 전화 화면을 깨우는 것이다.

private class WakeUp extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... arg0) { 

     PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName()); 

     do{ 
      try { 
       Thread.sleep(WAKEUP_EVERY); //600000ms 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      }   

      wl.acquire(); 

      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

      wl.release(); 

     }while(!timeCompleted || !transferCompleted); 

     return null; 
    } 

} 
+0

는 스레드가 살해되지 않았는지인가? 이 서비스 나 AlarmService를 사용하여 매 10 분마다 펄스를 만들 수 있습니다. AsyncTask는 스레드 풀에서 스레드 풀에서 실행되므로 스레드 풀은 스레드 실행시 시간 제한을 가질 수 있습니다. –

+0

@ 그렉 나는 방아쇠가 아직 살아 있는지보기 위해 방아쇠를 잡은 직후와 오른쪽 방아쇠를 풀기 전에 로그 문을 추가했습니다. 명령문은 adb에 나타나지만 화면의 전원이 켜지지 않으므로 스레드가 살아 있지만 waklock이 예상대로 작동하지 않는 것처럼 보입니다. Service/AlarmService를 살펴보고 시도 할 부분이 있는지 살펴 봅니다. – Michael

+0

오,이 플래그 (ACQUIRE_CAUSES_WAKEUP)를 추가 했습니까? 화면이 켜지기를 원한다면, 그 플래그를 추가해야한다고 생각합니다. PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP –

답변

2

ACQUIRE_CAUSES_WAKEUP 플래그를 사용하여 절전 모드 해제를 설정하는 것을 잊어 버렸습니다. 문서에 따라 :

일반적인 웨이크 잠금 장치로 실제로 조명이 켜지지는 않습니다. 대신, 조명이 켜지면 켜지도록합니다 (예 : 사용자 작업). 이 플래그는 WakeLock을 획득 할 때 화면 및/또는 키보드가 즉시 켜지도록합니다. 일반적인 사용은 사용자가 즉시 볼 수있는 알림에 대한 것입니다.

은 자세한 내용은 ACQUIRE_CAUSES_WAKEUP를 참조하십시오 : D

관련 문제