우선 안드로이드 6.0이상의 버전부터는 Doze모드라는 새로운 모드가 생겼습니다. 쉽게 말하면 절전모드 같은것입니다. 이 도즈모드라는거에 진입하는 조건은 1. 배터리가 충전중이 아닐것 2. 휴대폰이 제자리에 계속 놓여진 상태일것 3. 화면이 꺼진상태로 일정시간 지속되어있을것 3개의 조건이 된다면 도즈모드에 진입하게됩니다. 이 모드에 진입한다면 각종 백그라운드 서비스가 제한됩니다. 결국 이 도즈모드에 진입을 막기위한 방법을 찾다가 화이트리스트 라는것을 찾았습니다. 이 화이트리스트에 등록을 한다면 도즈모드 대상으로부터 제외됩니다. 화이트모드에 진입하는 시간은 제조사별로 다 다르다고합니다.
PowerManager를 이용하여 현재 이 앱이 화이트리스트에 등록이 됬는지 안됬는지 판단이 가능합니다. WhiteCheck변수에서 true값이라면 화이트리스트에 등록이 된것이고, false라면 등록이 되지않은것입니다. 밑에 if문에 보시면 if(!WhiteCheck) 조건이있습니다. ! <-- not 조건이므로 true -> false / false -> true로 변경해줍니다. 만약 등록이 되지않았다면 등록을 진행해주는 Intent를 진행합니다. 이렇게 도즈모드에 빠지지 않도록 해봤는데요. 구글 플레이 스토어에 업로드 하실때 화이트리스트같은 경우 조건이 있다고해요. https://developer.android.com/training/monitoring-device-state/doze-standby.html?authuser=1#understand_app_standby 잠자기 및 앱 대기 모드에 맞게 최적화하기 | Android 개발자 | Android Developers 앱에서 Android 6.0의 절전 기능을 테스트하고 최적화합니다. developer.android.com 해당 페이지 맨 아래부분에 그에대한 설명이 나와있으니 참고해보시는것도 좋을것같습니다. 하나 더 방법은 FCM을 이용하는 것입니다. https://onedaycodeing.tistory.com/24 FCM 파이어베이스 포그라운드 백그라운드 알림 및 백그라운드 작업처리 저번 게시글에 있던 소스코드는 단순히 푸시알림을 받기만 하면 되는 코드였습니다. 이번 코드는 웹에서 통해 보내주는 제이슨 형식의 푸시알림을 변경하여 포그라운드 및 백그라운드 푸시알림 + 백그라운드 알림.. onedaycodeing.tistory.com 해당 게시글을 참조하시면 됩니다. 단! 여기서 주의하셔야 할 사항은 웹딴 서버에서 보내실때 제가 적어놓은
이부분에서
이렇게 "high"를 전송하여 우선순위를 설정해주셔야 합니다. ================================= ================================= ================================= 출처: http://m.blog.naver.com/devstory/130104356488 절전 모드로 인하여 wifi 가 꺼지는 것을 방지하기 위해 wifiLock 과 wakeLock 을 등록한다. wifiLock 는 말그대로 wifi 상태만 유지 wakeLock 는 cpu 상태를 유지하기 위해 사용하였다. wakeLock 의 FLAG 에는 아래와 같이 6가지가 존재한다. PARTIAL_WAKE_LOCK : CPU ON, 화면은 꺼짐, 키보드 꺼짐 SCREEN_DIM_WAKE : CPU ON, 화면 어둡게, 키보드 꺼짐 SCREEN_BRIGHT_WAKE_LOCK : CPU ON, 화면 밝게, 키보드 꺼짐 FULL_WAKE_LOCK : CPU ON, 화면 밝게, 키보드 ON 추가가 가능하나 PARTIAL_WAKE_LOCK 과는 같이 써도 소용 없는 FLAG 2개 ACQUIRE_CAUSES_WAKEUP : acquire 할 때 스크린과 키보드를 켜줌으로써 중요한 통지(notification)이 왔을 때 사용자가 화면을 바로 볼 수 있도록 함. ON_AFTER_RELEASE : WakeLock 이 릴리즈 되었을 때 유저 액티버티 타이머가 리셋 되어지고 스크린을 좀더 오래 켤 수 있고, wake lock 을 반복적으로 수행하는 사이에 발생하는 깜빡임 현상을 줄이고자 할 때 사용. 샘플 : WifiLock wifiLock = null; public void changeToWakeMode() { if
(wifiLock == null) { if (wakeLock == null) { @Override if (wifiLock != null) {
if (wakeLock != null) { super.onStop(); 참고 : http://eddykudo.com/64 http://2-up.tistory.com/713 http://developer.android.com/reference/android/os/PowerManager.html http://developer.android.com/reference/android/os/PowerManager.WakeLock.html ================================= ================================= ================================= 절전모드로 안들어가게 하는 소스입니다. 밝기를 고정 시킨다는 거죠 (Java 코드) PowerManager powerManager = (PowerManager) getSystemService(Context.POWER.SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag"); wakeLock.acquire(); //화면이 밑의 구문이 나올때까지 밝기고정 됩니다. wakeLock.release(); *매니페스트 파일 <uses-permission android:name="android.permission.WAKE_LOCK" /> 자바코드에 진하게 해놓은
부분에는 다른 속성이 들어갈수있습니다
이상입니다. ================================= ================================= ================================= 출처: http://blog.naver.com/PostView.nhn?blogId=devstory&logNo=130104356488 절전 모드로 인하여 wifi 가 꺼지는 것을 방지하기 위해 wifiLock 과 wakeLock 을 등록한다. wifiLock 는 말그대로 wifi 상태만 유지 wakeLock 는 cpu 상태를 유지하기 위해 사용하였다. wakeLock 의 FLAG 에는 아래와 같이 6가지가 존재한다. PARTIAL_WAKE_LOCK : CPU ON, 화면은 꺼짐, 키보드 꺼짐 SCREEN_DIM_WAKE : CPU ON, 화면 어둡게, 키보드 꺼짐 SCREEN_BRIGHT_WAKE_LOCK : CPU ON, 화면 밝게, 키보드 꺼짐 FULL_WAKE_LOCK : CPU ON, 화면 밝게, 키보드 ON 추가가 가능하나 PARTIAL_WAKE_LOCK 과는 같이 써도 소용 없는 FLAG 2개 ACQUIRE_CAUSES_WAKEUP : acquire 할 때 스크린과 키보드를 켜줌으로써 중요한 통지(notification)이 왔을 때 사용자가 화면을 바로 볼 수 있도록 함. ON_AFTER_RELEASE : WakeLock 이 릴리즈 되었을 때 유저 액티버티 타이머가 리셋 되어지고 스크린을 좀더 오래 켤 수 있고, wake lock 을 반복적으로 수행하는 사이에 발생하는 깜빡임 현상을 줄이고자 할 때 사용. 샘플 : WifiLock wifiLock = null; public void changeToWakeMode() { if (wifiLock == null) { if (wakeLock == null) { @Override if (wifiLock != null) {
if (wakeLock != null) { super.onStop(); 참고 : http://eddykudo.com/64 http://2-up.tistory.com/713 http://developer.android.com/reference/android/os/PowerManager.html http://developer.android.com/reference/android/os/PowerManager.WakeLock.html ================================= ================================= ================================= 출처: http://drcarter.tistory.com/99
안드로이드의 특징중에 하나를 꼽는다면 백그라운드 실행이라고 할 수 있겠습니다. 아이폰과 다르게 멀티테스킹이 가능한 안드로이드는 대기 모드로 들어가게 되면 배터리 소모를 줄이기 위해서 wifi를 자동으로 꺼버리게 됩니다. 하지만 무선으로 android.net.wifi.WifiManager.WifiLock
이렇게 하면 됩니다. 두번째로 주의할 점은, 대기상태가 오래 된다면 cpu의 활동을 정지시켜 버립니다. 이것도 배터리 소모를 줄이기 위한 것이기는 하지만, 단적인 예로 들어서 스트리밍으로 음악을 듣고 있는 중에서 화면을 꺼버린 대기 모드일 경우에 cpu를 정지 시킨다면 음악을 들을 수 없게 되겠지요. 그래서 wifi상태를 유지 시켜주기 위한 WifiLock이 있듯이 cpu상태를 활동상태로 유지시켜주는 WakeLock이 있습니다. android.os.PowerManager.WakeLock
이렇게 하면 됩니다. 이 두가지를 유지시켜 준다면, 백그라운드로 실행을 하면서 대기 모드로 전환이 된다고 해도, 해당 어플이 죽거나 하는 일은 없겠지만, 그만큼 배터리 소모가 많아지기 때문에 안드로이드폰을 오래 사용할 수는 없겠지요. ================================= ================================= ================================= |