Android : Wakelock 및 취급 방향 변경
-
20-09-2019 - |
문제
응용 프로그램에 wakelock을 사용하여 앱이 보일 때 휴대 전화가 잠들지 않도록합니다.
오리엔테이션 변경이 있고 시스템이 조경 모드에서 앱을 파괴하고 재현 할 때 문제가 발생합니다. Wakelock 타이머가 백그라운드에서 만료 된 경우 시스템은 화면을 끄는 기회로 Wakelock의 릴리스를 취합니다.
편집 : Wakelock Onresume을 설정하고 OnPause를 출시하고 있다고 언급해야합니다. 이해할 수 있듯이 앱이 Wakelock이 유출되는 것을 방지하기 위해 해제해야합니다.
오리엔테이션 변경을 계속하려면 Wakelock이 필요합니다.
아래는 이것에 대한 해결책을 설명했습니다. 이것이 처리하는 선호하는 방법이며 대안이 있습니까?
활동이 아닌 wakelock을 보유하고 활동이 풀릴 때 서비스가 카운트 다운 타이머를 시작하여 (10 초 동안) 활동이 반창하지 않으면 타이머가 만료되면 wakelock을 해제합니다. 간단한 방향이 변경되면 10 초 안에 활동이 반동되고 Wakelock을 유지하지 않으면 Wakelock이 출시됩니다.
감사.
해결책
대신 a WakeLock
, 노력하다 getWindow().setFlags()
사용 WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
깃발.
Wakelock 타이머가 백그라운드에서 만료 된 경우 시스템은 화면을 끄는 기회로 Wakelock의 릴리스를 취합니다.
그것은 안됩니다. 정의상, 사용자는 장치와 상호 작용 했으므로 다른 것과 무관하게 화면이 계속 유지되어야합니다.
다른 팁
내가 한 방법은 다음과 같습니다 ...
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "DoNotDimScreen");
그 다음에 ...
wl.acquire();
... 실제로 웨이크 잠금 장치를 활성화해야 할 때.
'PowerManager.on_After_Release'플래그는 사용자 활동 타이머를 찌르기 때문에이 웨이크 잠금 장치가 출시 될 때 화면이 조금 더 오래 지속되므로 방향 변경으로 활동이 파괴 될 때 발생합니다.
나를 위해 잘 작동합니다!
나는 실제로 Wakelock을 공개하지 않음으로써 그것을했다. 대신 타임 아웃으로 획득합니다.
private PowerManager.WakeLock wl;
protected void onStart(Bundle savedInstanceState) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Words counter");
// disable reference counting, as acquire/release calls are not paired
wl.setReferenceCounted(false);
wl.acquire();
}
protected void onStop() {
// acquire for few seconds to keep lock until onStart is called with new orietnation
wl.acquire(3000);
}
다른 방법에 비해 장점 :
- 사용 가능
SCREEN_DIM_WAKE_LOCK
- 간단합니다 (isfinishing () 등으로 플레이 할 필요가 없습니다)
- 오리엔테이션 변경 후 사용자 활동을 찌르지 않습니다. 즉, 희미한 디스플레이는 희미하게 유지됩니다
- 릴리스 (예 : 시간이 끝나지 만 사용자는 활동에 남아 있음)가 즉시 릴리스됩니다. 기본 시간 초과를 기다릴 필요가 없습니다.