pm
및 keepScreenOn
변수가 전역 적으로 정의됩니다. 나는 나의들의 OnDestroy, onPause 및 중지시에WakeLock은 아직 개최 중입니다.
if (keepScreenOn == null) {
keepScreenOn = pm.newakeLock(PowerManager,SCREEN_BRIGHT_LOCK,"tpd");
}
keepScreenOn.acquire();
와 잠금을 잡아 onRestart 내 ONSTART, onResume에서
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
keepScreenOn = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_LOCK,"tpd");
및 :
나는 내에서 OnCreate 방법에 PowerManager.WakeLock을 잡아 나는 다음과 같이 자물쇠를 풀어 준다 :
if (keepScreenOn != null) {
keepScreenOn.release();
keepScreenOn = null
}
내 앱이 종료 된 후 실패 화면이 나타나고 compl AINS 그
의 java.lang.Exception : TPD
추적 내가 종료 전에 잠금을 해제 있음을 보여줍니다 여전히 유지하면서 가동 잠금 확정. 내가 무엇을 놓쳤는가? 방법은 적어도 onPause
중 하나 onStop
, 또는 onDestroy
을 횡단하지 않고 응용 프로그램에서이 없습니다
. 나는 release()
이라는 앱을 acquire()라고 불렀다는 것을 알 수있다. 따라서 wakelock이 참조 카운트 된 경우에도 여전히 0 개의 참조가 있어야한다.
문제와 관련이 없지만 너무 많은 곳에서 잠금을 설정하고 해제하는 이유는 무엇입니까? onResume 및 onPause에서만 실행하지 않는 이유는 무엇입니까? – Olegas
나는 그것을 시험해 보았다. 그런 다음 모든 onXXX 루틴을 추적했습니다. 그런 다음 나는 그것을 추가했다 –
'keepScreenOn' 변수가 클래스에서 한 번만 선언 되었습니까? 범위가 작은 다른 선언이 있습니까 (예 : 메소드에서 선언 됨). – Olegas