(분리 된) WakeLocks를 처리하는 방법?


40

나는 당신 대부분이 적어도 WakeLocks 에 대해 들어 본 것 같아요 . 많은 분들이 이미 알고 있든 없든 이미 경험 했을 것 입니다. 어떤 사람들은 일반적으로 그것들을 다루는 방법을 알지만“더 복잡한 후보들”을 다루는 방법을 아는 사람은 거의 없습니다.

모르는 사람들은 위의 링크를 통해 설명을 할 수 있지만 간단한 요약으로 이어집니다. 앱은 WAKE_LOCK기기 구성 요소를 "절전"상태로 유지하도록 요청할 수 있으므로 디스플레이가 꺼져 있어도 작업을 수행 할 수 있습니다. 탐색하는 동안 화면을 유지하고, 음악을 스트리밍하기 위해 WiFi를 활성화하는 등 대부분의 경우에 매우 유용하지만 잘못 사용하면 배터리가 단시간 내에 방전됩니다 (시간당 최대 25 %) .

대부분의 경우 소스 (일반적으로 잘못된 동작 앱)를 쉽게 식별 할 수 있습니다. 많은 사용자에게 도움이 될 수 있으므로 아래 답변에이를 표시하겠습니다. 그러나 WakeLock을 요청한 앱이 릴리스되지 않은 채 종료되면 어떻게해야합니까? 안드로이드 시스템 은 그것을 처리하지 않습니다 . 물론 재부팅하면 문제가 해결되지만 항상 (원하는) 옵션은 아닙니다.

따라서 사용자 관점에서 (개발 솔루션에 대해 묻는 것이 아니라 사용자가 작업을 처리하는 방법에 대해 묻습니다) :

문제를 해결하고 추가 배터리 소모를 피하기 위해 사용자 가 수행 할 수있는 작업은 무엇입니까 ?

나는 루트와 관련이 없는 답변을 선호 합니다 (따라서 모든 사용자가 혜택을 누릴 수 있습니다). 그러나 "루팅 된 솔루션"은 완전히 유효하며 환영합니다.


2
나는 당신이을 사용하여 wakelock을 "잘못 된"방법으로 만든 경우에만 사실 /sys/power/wake_lock이지만 PowerManager와 PowerManager.WakeLock을 사용하여 "올바른"방법을 사용하면 서비스가 실제 wakelock을 유지한다는 인상을 받았습니다. 당신의 프로세스가 죽었더라도 그것을 릴리스 ...
— Izkata

1
내가 연결 한 정보에 따르면 그것은 사실이 아닙니다. 누군가가 커널 소스를 확인했다고보고했지만 그에 대한 힌트를 찾지 못했습니다. 개발자를위한 힌트 : "일부 웨이크 락"을 timed 요청할 수있는 것처럼 보이 므로 타이머가 작동하고 웨이크 록 요청이 새로 고쳐지지 않으면 자동으로 만료됩니다. 그것은 당신이 말하는 "안전한 방법"이어야합니다.
— Izzy

답변:


37

영향을 받았다고 어떻게 알 수 있습니까?

이것은 아마도이 주제에 익숙하지 않은 사람들에게 첫 번째 질문 일 것입니다. Gingerbread (Android 2.3) 이상에서는 배터리 통계를 파악하는 데 도움이되는 서비스가 제공됩니다. 제조업체는 다른 지점에 배치하는 경향이 있지만 대부분 설정 → 전화 정보 → 배터리 또는 유사 항목에 있으며 대부분의 배터리를 사용한 앱 목록이 표시됩니다. 그 위에 작은 그래프가 있습니다. 그것을 누르면 다음과 비슷한 화면이 나타납니다.

배터리 통계
Android 2.3의 배터리 통계 스크린 샷

내 기기 중 하나에서 문제를 보여주는 스크린 샷을 선택했습니다. 아래쪽 두 개의 파란색 막대 ( "Aktiv"= 장치가 활성 상태로 유지됨, "Bildschirm an"= "Screen on")를 보면 "Aktiv"의 가장 오른쪽에있는 파란색 막대가 WakeLock을 나타냅니다. 화면이 꺼졌다는 사실. 따라서 이것으로 WakeLock이 있는지 확실하게 알 수 있지만 누가 원인을 알 수는 없습니다.

기기에서이 화면을 제공하지 않거나 하단의 막대가 방금 발견되었습니다 (예 : Android 4.0.3을 실행 하는 LG Optimus 4X 에서 이러한 막대를 잘라낸 경우). GSam 배터리 모니터를 사용하여 찾을 수 있습니다 .

GSam 배터리 모니터
GSam 배터리 모니터의 유사한 정보 -여기 언급 된 "파란색 막대"는 노랑 / 주황

WakeLock의 원인은 무엇입니까?

불행히도,이 질문은 사전 설치된 앱을 사용하여 대답 할 수 없습니다 (일부 사용자 지정 ROM 제외). 그러나 가능한 도구가 있습니다. 이에 대한 가장 잘 알려진 후보는 BetterBatteryStats 이며 부분 웨이크 록 섹션 에서 원인을 보여줍니다 .

BetterBatteryStats BetterBatteryStats2
BetterBatteryStats 스크린 샷

첫 번째 예 2 (앱의 Playstore 페이지에서 가져옴)에서 WakeLocks를 대부분 발생시키는 이벤트는 원하는 것이 었습니다. 음악을 듣는 동안 재생이 중단되는 것을 원하지 않습니다. 따라서 두 번째 예제 3 (내 장치 중 하나에서 실제 사례에서 가져옴)은 더 나은 것으로 입증 될 수 있습니다. 최상위 3 개 이벤트는 동일한 앱으로 인해 발생하며, IMAP 푸시 서비스를 활성화하려면 WakeLock이 필요했습니다.

BetterBatteryStats 의 대안으로 UzumApps 의 답변에 언급 된 Wakelock Detector 앱을 확인하십시오 .

Wakelock Detector : 앱 세부 정보 Wakelock Detector : 프로세스 선택
Wakelock Detector-이미지를 클릭하면 확대됩니다. (출처 : Google Play )

무엇을 할 수 있습니까?

이전 섹션의 두 번째 예에서와 같이 사건이 분명하다면, 그 행동은 분명합니다. 적어도 제 경우에는 : 우편물이 도착했을 때 즉시 통보받을 필요가 없습니다 . 30 분의 지연은 절대적으로 허용됩니다. 그래서 메일 앱으로 이동하여 IMAP 푸시를 비활성화하고 ( 푸쉬 이메일 참조 ) 30 분 폴링 간격으로 전환했습니다. WakeLocks는 완전히 사라지지 않았지만 현저하게 떨어졌습니다. 배터리 수명이 눈에 띄게 향상되었습니다.

그런 다음 질문 자체에 언급 된 경우가 있습니다 : WakeLock을 해제하지 않는 나쁜 행동 앱. 발견 한 내용을 개발자에게보고 수정을 요청하십시오. 그가 전달한다면 : 문제 해결. 그렇지 않은 경우 : 거의 항상 대체 앱을 사용할 수 있습니다.

안드로이드 시스템 자체라면 어떨까요?

예, 때로는 Android 서비스에서 98 % 이상을 소비하는 것처럼 보입니다. 아, 98 %라면 대부분의 경우 후보의 이름은 LocationManagerService 입니다. 우리를 감시하는 나쁜 사람? 반드시 그런 것은 아닙니다. 이 특별한 경우에, "나쁜 녀석"은 적어도 직접적으로는 유죄가 아닙니다. 현재 위치를 너무 자주 요청하는 다른 앱입니다. Setera.org에는 이에 대한 훌륭한 기사가 있습니다 : Pinpointing Android LocationManagerService battery drain . 초록을 주려면 : Android를 사용합니다.dumpsys기능 (루트 필요)은 시스템 상태를 덤프하며 LocationManagerService에 대해 설정된 리스너를 조사 할 수 있습니다. 위치 정보를 위해 지속적으로 "해머링"하는 구성 쇼를 자세히 살펴보십시오 (일부는 영구적으로, 즉 중단하지 않음). 앱의 ID가 함께 나열되고 앱의 기술적 이름과 함께 덤프의 다른 위치에도 여전히 식별되어 적절한 조치를 취할 수 있습니다.

그리고 UFO는 어떻습니까?

안타깝게도 WakeLock을 등록한 후 릴리스하지 않고 종료 한 앱이 있습니다. 남은 것은 * 사용하지 않은 F *** ing Obsoletes *-WakeLocks는 사용하지 않습니다. 따라서 앱을 포 그라운드로 가져와 재구성하거나 WakeLocks를 해제하도록하는 방법은 없습니다.

여기에 나에게 알려진 유일한 솔루션은 재부팅입니다. 더 나은 솔루션을 원합니다. 물론 유죄 앱을 알고 있다면 위와 동일합니다. 개발자에게 알리거나 수정하거나 앱을 교체하십시오. 그러나 현재 WakeLock을 제거하는 것에 대해 ? 다른 사람이 재부팅에 대한 더 나은 대안을 제공 할 수 있습니까?

권장되는 추가 판독 값이 있습니까?

확실한. 지금은 나중에 더 추가 할 수 있습니다.


2
개발자들에게 "교육을 마쳤을 때 깨우침을 풀고 스스로를 정리하라"고 말하는 더 나은 교육?
— t0mm13b

3
항상 멋진 답변을 보내주십시오. 당신은 결코 지루하지 않습니다? : D
— t0mm13b

2
물론 -하지만 내 질문 참조 : I 명시 적있어 NOT 하지만, 개발자 측에 대해 물어 사용자 관점에서 . 어쩌면 나는 그것을 더 분명하게 만들어야 할 것이다;)
— Izzy

1
지루한? 누군가가 어떻게 생겼는지 설명해 주시겠습니까? XD 아니요, 항상 마음에 무언가가 있습니다. 그것이 충분히 좋다고 생각하면 여기에 그것에 대해 묻습니다 (내 프로필 참조 : 자주 묻지 않습니다). (일부) 답변이있을 수 있습니다. 질문이 가치가 있다면 여기에 피드백은 항상 상쾌합니다 :)
— Izzy

1
제발! 그리고 당신의 발견을보고하십시오! 방금 "분리 된"WakeLocks와 관련된 문제를 설명했습니다. 한 시간 동안 주위를 파고 들었을 때 LocationManagerService 라는 것을 보았습니다 . 0 초 (sic!) 모두 업데이트가 Android 설정 (= :-0)에 등록되었습니다. 나는 그것을 끝내고, 멈추고, 명령 줄에서 죽였습니다 ... 자물쇠를 제거 할 수있는 방법은 없습니다. WTF는 설정을 했 습니까? 물론 재부팅으로 문제가 해결되었지만 하루에 두 번 재부팅해야하는 WindowsPhone입니까?
— Izzy

6

요컨대, 이것은 매우 좋은 질문이지만 최종 사용자에게 알리는 것 이상을 보증합니다.

커널을 재 설계하여 웨이크 잠금을 제거하고보다 효율적으로 원리를보다 효율적으로 관리함으로써 배터리 수명을 연장하십시오.

불행히도, "전력 관리"를 가능하게하는 사실상의 솔루션으로 받아 들여졌습니다. LWN.net 과 같은 다른 사이트들과 같은 사이트 에서 설명 된 다른 기사들과 함께, wakelocks (드라이버 개발을위한 리눅스 전문가 인 Gregh Kroah Hartman과 정확한 링크를 위해 인터넷 검색)에 대한 광범위한 토론이있었습니다 . 이 글은 Gregh Kroah Hartman이이 블로그에 언급 한 기사로 , Rafael J. Wysocki 가 제안한 대안 솔루션에 동의 한 것으로 보입니다 . 이것이 최신 커널 v3.xx에 실제로 있는지 확실하지 않습니다.

잘못 설계된 앱은 화면을 켜는 것과 같은 깨우기 잠금을 요청할 수 있지만 종종 화면을 켜는이 시나리오에서는 더 효율적인 방법이 있습니다.

getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

최종 사용자를 위해 전문 용어 등을 없애려고 노력하는 동안 실제로 문제의 핵심은 웨이크 락을 관리하는 방법에 대한 커널 코드로 요약됩니다.

다음은 시작 되지 않은 사람을위한 wakelocks에 대한 XDA 에 대한 간략한 요약입니다 . BetterBatteryStats 를 사용 하면 배터리를 소모하는 프로세스를 정확히 확인할 수 있으며 위키는 github에서 호스팅되며 여기 에서 판매 됩니다 .


1
내가 언급 한 것과 동일한 XDA 스레드를 가리키는 것이 재미 있습니다. 시스템을 더 잘 관리해야한다는 데 동의합니다 (예 : 더 이상 실행되지 않는 앱에서 요청한 WakeLocks를 해제). 또한 개발자는 LifeCycle의 적절한 상태에서 명시 적으로 릴리스하여 코딩에 더주의를 기울여야합니다. 그러나 그것은 우리가 사용자를 아는 데 도움이되지 않습니다 . 내 대답이 사용자가 무엇을 할 수 있는지에 대한 통찰력을 제공하기를 바랍니다. 여러분 중 한 명이 "기술자"가 남긴 격차를 메울 수 있습니다!
— Izzy

3

Wakelock Detector를 확인하십시오 : XDA-Developers / Google Play :

Wakelock 탐지기는 더 나은 모양을 위해 앱의 wakelock을 하나의 확장 가능한보기로 그룹화합니다. 또한 실행중인 앱을 보여줍니다. 그리고 앱의 확장 된보기에는 킬 제거 정보 버튼이 있습니다.

Wakelock Detector : 앱 세부 정보 Wakelock Detector : 프로세스 선택
이미지를 클릭하면 확대됩니다. (출처 : Google Play )

공개 : 나는이 응용 프로그램의 책임 개발자 중 하나입니다. 이 프로젝트에서 취미로 4 명의 친구가 더 있습니다.


감사합니다! 그것은 실제로 귀중한 정보입니다. 답변에 더 자세한 내용을 추가 하시겠습니까? 예를 들어 무엇이 그렇게 특별합니까? 그런 다음 스크린 샷을 추가합니다. 완료 될 때까지 : 여기 앱에 대한 Playstore 링크가 있습니다 .
— Izzy

자세한 내용 감사합니다! 나는 당신의 대답에 그것들을 병합했다. 나는 당신이 신경 쓰지 않기를 바란다. 이로 인해 LocationService 가 장치를 웨이크 록합니다. 겠습니까 잠금 감지기가 일어나 거나 - 실제 원인으로 다음 책임있는 응용 프로그램을 보여 LocationService 하면 해당 응용 프로그램 패키지의 일부가 아닙니다의로,?
— Izzy

wakelock detector는 동일한 앱 패키지 이름에 속하는 wakelock을 그룹화하기 때문에 귀하의 질문에 대한 대답은 'no'입니다. 위치 서비스가 android os에 속하므로 솔루션은 앱의 사용자 권한을 확인합니다
— UzumApps

고마워요! "Android 시스템 자체라면 어떨까요?"에 대한 쉬운 해결책을 원했습니다. 부품. 그런 일은없는 것 같습니다. 가능하다면 WLD와 통합하는 것이 좋습니다 :)
— Izzy

2
귀하의 의견에 감사드립니다, 나는 그것을 고려하고 그 일을 할 것입니다. WLD는 좋아 보인다! !! :)
— UzumApps

1

루팅되지 않은 장치 사용자를 도울 수있는 몇 가지 방법

  1. @Uzumapps, 응용 프로그램의 개발자 중 하나가 게시 한보고 솔루션을 사용하여 가동 잠금 감지기 ( WLD을 ), I는 사용할 수있는 응용 프로그램 사용에 대한 자신이 업데이트되지 않았 음을 놀라게하고 가동 잠금 감지기 빛이라고 루트없이를 ! 이 새로운 장치 (루팅되지 않은)에 대한 솔루션을 찾고 있음을 발견했습니다.

이것은 최근에 개발 된 것이므로 루팅되지 않은 장치 사용자를 위해이를 게시합니다. Moto X Play (Android 6.0.1)에서 작동하는 것으로 테스트되었습니다.

참고 : 두 번째 방법을 사용할 수 없었습니다. 저와 같은 정통하지 않은 사람들을 위해 편집 솔루션을 환영합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.