(분리 된) 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.