목차
(1) AndroidManifest.xml에서 권한 설정
(2) PowerManager 클래스를 통해 WakeLock 클래스의 인스턴스 객체를 얻습니다.
1. 플래그 설정
이 방법은 공식적으로 권장되는 방법이며 가장 간단하고 권한 신청이 필요하지 않습니다.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
2. View 클래스의 속성 메소드를 사용하십시오.
1. XML 레이아웃으로 설정:
기본 인터페이스에서 참조하는 xml 파일에서 최상위 레이아웃을 찾아 다음 속성을 추가합니다.
android:keepScreenOn="true"
2. 기능 코드에서 설정:
topLayout.setKeepScreenOn(true);
3. Wakelock 잠금 메커니즘
1. 소개
Android 애플리케이션 개발에서 Wakelock은 작업이 완료될 때까지 애플리케이션이 백그라운드 작업을 계속 수행할 수 있도록 화면이나 CPU를 활성 상태로 유지하는 데 널리 사용됩니다. Wakelock은 일부 특정 애플리케이션 시나리오를 해결하기 위해 만들어진 개념으로, 해당 기능은 특정 요구 사항을 충족하기 위해 화면, CPU 또는 기타 시스템 상태를 계속 실행하는 것입니다.
WakeLock은 Android 프레임 워크 계층에서 제공하는 메커니즘 집합입니다 . 애플리케이션은 이 메커니즘을 사용하여 Android 기기의 상태를 제어할 수 있습니다. 여기서 장치 상태는 주로 화면을 열고 닫는 것과 CPU를 유지하는 것을 의미합니다. WakeLock은 시스템을 "깨어있는" 상태로 유지하는 수단이라는 점을 간단히 이해하십시오.
2. 기능
경우에 따라 일부 앱은 사용자가 오랜 시간 동안 상호 작용하지 않아도 잠자기 상태로 전환되지 않도록 합니다. 예를 들어, 동영상을 볼 때 휴대폰 화면이 켜져 있어야 합니다. 휴대폰 화면이 일정 시간 동안 꺼져 있으면 시스템이 절전 모드로 들어가고 네트워크 다운로드 중단, 백그라운드에서 음악 재생 일시 중지 등 일부 백그라운드 작업이 제대로 실행되지 않을 수 있습니다 . Android는 이러한 목적으로 WakeLock을 설계했습니다. WakeLock 이러한 문제를 해결하기 위해 응용 프로그램이 WakeLock을 적용하는 한 시스템은 WakeLock을 해제하기 전에 절전 모드로 전환되지 않으며 화면이 꺼진 경우에도 응용 프로그램에서 수행할 작업이 여전히 수행되지 않습니다. 시스템에 의해 중단되었습니다.
- 애플리케이션이 백그라운드 작업을 계속 수행할 수 있도록 CPU를 활성화 상태로 유지합니다.
- 애플리케이션이 사용자에게 지속적으로 정보를 표시할 수 있도록 화면을 활성 상태로 유지합니다.
- 특정 특정 작업이 정상적으로 수행될 수 있도록 장치를 활성화된 상태로 유지하세요.
Wakelock은 일반적으로 다음 시나리오에서 사용됩니다.
- 음악 재생: 음악 애플리케이션이 재생 중일 때 음악이 정상적으로 재생될 수 있도록 CPU를 깨워야 하며, 사용자가 현재 재생 중인 트랙을 볼 수 있도록 화면을 깨워야 합니다.
- 백그라운드 작업: 애플리케이션이 백그라운드에서 특정 작업을 수행해야 할 때 작업이 정상적으로 실행될 수 있도록 CPU가 깨어 있는지 확인해야 하며 사용자가 특정 정보를 얻을 수 있도록 화면을 깨어 있어야 할 수도 있습니다. ;
- 위치 모니터링: 애플리케이션이 장치의 위치 정보를 모니터링해야 하는 경우 장치의 위치 정보를 올바르게 얻을 수 있도록 CPU가 깨어 있는지 확인해야 합니다.
3. 분류표시
- PARTIAL_WAKE_LOCK: CPU를 계속 실행하면 화면과 키보드 조명이 꺼질 수 있습니다.
- SCREEN_DIM_WAKE_LOCK: CPU를 계속 실행하고, 화면이 표시된 상태로 유지되지만 회색으로 표시될 수 있으며, 키보드 조명이 꺼지도록 허용합니다.
- SCREEN_BRIGHT_WAKE_LOCK: CPU를 계속 실행하고, 화면을 강조 표시하고, 키보드 조명을 끄도록 허용합니다.
- FULL_WAKE_LOCK: CPU를 계속 실행하고 화면을 강조 표시한 상태로 유지하며 키보드 조명도 밝기를 유지합니다.
- ACQUIRE_CAUSES_WAKEUP: 강제로 화면을 밝게 합니다. 예를 들어 애플리케이션이 알림을 받은 후 화면이 켜집니다.
- ON_AFTER_RELEASE: WakeLock을 해제한 후 화면이 바로 꺼지지 않고 일정 시간 동안 화면이 켜진 상태를 유지합니다.
- UNIMPORTANT_FOR_LOGGING: 숨겨진 플래그, 시스템 수준에서만 사용됨
- DOZE_WAKE_LOCK/DRAW_WAKE_LOCK: 숨겨진 분류, 시스템 수준에서만 사용됨
- PROXIMITY_SCREEN_OFF_WAKE_LOCK: 근접 센서를 기반으로 화면을 끕니다. 가장 일반적인 사용 시나리오는 귀에 가까이 대고 전화를 걸면 화면이 자동으로 꺼지는 것입니다.
4. 사용방법
WakeLock은 PowerManager의 내부 클래스이며 해당 코드 경로는 다음과 같습니다.
프레임워크/베이스/코어/java/android/os/PowerManager.java
(1) AndroidManifest.xml에서 권한 설정
<uses-permission android:name="android.permission.WAKE_LOCK" />
(2) PowerManager 클래스를 통해 WakeLock 클래스의 인스턴스 객체를 얻습니다.
일반적으로 onResume()에서 acquire() 메서드를 호출하고 onPause() 메서드에서 release() 메서드를 호출할 수 있습니다.
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "tag:CpuKeepRunning");
//或 执行 wakeLock.acquire();
wakeLock.acquire(1000 * 60);
@Override
protected void onResume() {
super.onResume();
//可以在onResume()中执行acquire()方法
if (wakeLock!= null) {
wakeLock.acquire();
}
}
@Override
protected void onPause() {
super.onPause();
if (wakeLock!= null) {
wakeLock.release();
}
}
(3) 주의사항
- 공무원들은 더 이상 화면을 켜두기 위해 이 방법을 사용하는 것을 권장하지 않습니다. 부적절하게 사용하면 앱이 "배터리 킬러"가 될 수 있습니다. 다른 두 가지 방법을 시도해 보십시오.
- WakeLock을 신청하는 방법에는 acquire() 와 acquire(long timeout) 두 가지가 있으며 후자가 상대적으로 더 안전합니다. WakeLock 해제를 잊은 경우 시스템은 시간 초과 기간 후에 자동으로 해제합니다. 일반적인 상황에서는 WakeLock을 사용한 후 최대한 빨리 해제해야 하며, 해제하는 것을 잊어버리면 전원이 빨리 소모됩니다.
- 문제를 방지하려면 시간 제한이 초과된 후 WakeLock을 해제하는 시간 제한이 있는 WakeLock.acquire() 버전을 사용하는 것이 좋습니다. 예를 들어 비디오를 재생할 때 비디오 재생 시간을 시간 초과로 사용하면 비디오 재생 후 WakeLock이 자동으로 해제됩니다. 우리는 소스 코드에서 그 원칙이 시간에 도달한 후 자동으로 해제되도록 WakeLock을 적용하기 위해 acquire()를 호출할 때 Handler.postDelay()를 통해 지연 메시지를 보내는 것임을 알 수 있습니다.
- 무기한 Wakelock을 사용하지 마십시오. 이렇게 하면 장치와 애플리케이션이 오랫동안 절전 모드 상태가 되지 않고 결국 장치 배터리가 소모됩니다.
- 필요한 경우에만 SCREEN_ON, SCREEN_DIM, SCREEN_BRIGHT 및 기타 유형의 Wakelock을 사용하세요. 다른 유형의 Wakelock은 애플리케이션의 요구 사항을 더 잘 충족할 수 있습니다.
- 앱이 제대로 작동하지 않거나 필요한 작업을 수행하지 않는 한 가능하면 Wakelock을 사용하지 마세요.
(4) 최적화 대책
Wakelock을 사용할 때 배터리 소모를 최소화하려면 다음 최적화를 수행할 수 있습니다.
- 필요할 때만 Wakelock을 적용하고 작업이 완료된 후 최대한 빨리 해제하세요.
- Wakelock을 자주 적용하고 해제할 필요 없이 플래그를 사용하여 장치가 활성 상태인지 쉽게 확인할 수 있습니다.
- 배터리 소모를 줄이기 위해 잘못된 웨이크업 작업을 방지하기 위해 Wakelock 사용을 최적화합니다.
- Wakelock 대신 AlarmManager 또는 JobScheduler와 같은 예약된 작업을 사용하면 배터리 수명을 더 잘 보존할 수 있습니다.
(5) 요약
Android Wakelock은 애플리케이션이 백그라운드에서 작업을 계속 수행할 수 있도록 기기를 활성 상태로 유지하는 Android에서 제공하는 잠금 메커니즘입니다. Wakelock의 사용법은 매우 간단합니다.깨어있는 상태를 유지해야 하는 경우에만 Wakelock.acquire() 메소드를 호출하면 됩니다.깨어있는 상태를 유지할 필요가 없는 경우에는 Wakelock.release()를 호출하면 됩니다. 끝내는 방법. Android Wakelock을 사용할 때는 Wakelock.release() 메서드를 호출하여 Wakelock을 해제하고 Wakelock 남용을 방지하는 등 여러 문제에 주의해야 합니다.