2012-07-30 3 views
1

내 프로젝트에서 다른 스레드가 서비스에서 시작됩니다. 장치가 일시 중지되었을 때이 스레드가 일시 중지되지 않게하려면이 스레드를 시작하기 전에 WakeLock을 획득하고이 스레드가 완료된 후이 WakeLock을 해제하십시오. 가끔이 API 호출 (WakeLock.acquire)이 너무 오래 걸리며 삼성 Galaxy SII LTE에서 4 분 이상 걸립니다. 다음은 WakeLock.acquire가 Samsung 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 분에 걸쳐 "획득"합니다.

테스트 장치 정보는 다음과 같습니다 모델 번호 : 사우스 캐롤라이나-03D 안드로이드 버전 : 2.3.6 기반 버전 : 3c03domlb9 커널 버전 : 2.6.35.11 - 3c03domlb9 980106 [email protected]#2 빌드 번호 : 진저 omlb9

누구든지이 문제를 전에 만났습니까? 또는 저를위한 제안은 평가됩니다.

답변

0

이 문제가 해결되었습니다. 주 스레드에 명령을 보내어 새 스레드에서 직접 해제하지 않고 절전 모드 해제를 해제합니다. 그렇다면이 문제는 더 이상 재현 될 수 없습니다.

근본 원인을 아는 사람이 있습니까? 왜 우리는 서비스 주 스레드에서 wake lock을 획득 할 수 없으며 같은 WakeLock obj에서조차도 다른 스레드에서 해제 할 수 없습니다.

+0

불행히도이 문제는 다시 나타납니다. 샤프 기기를 점검했는데 발생하지 않습니다. 이 문제는 삼성 Galaxy SII 장치에서만 발생합니다. –

+0

이 호에 대한 모든 업데이트는 있습니까? 나는 삼성 S6에 동일한 것을 가지고있다. .. – Dmitry

관련 문제