2013-01-23 5 views
2

내 앱이 CPU를 계속 실행하지만 화면을 꺼서 전력 낭비를 최소화하고 싶습니다.PowerManager newWakeLock.acquire()가 예상대로 작동하지 않습니다.

mPm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    mWakeLock = mPm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Constants.WAKE_LOCK_TAG); 

    mWakeLock.acquire(); //keep CPU running, turn screen off 

매니페스트가 포함되어 있습니다 : 내 무죄

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

내가 잠금을 획득에 그 예상되는 화면이 즉시 꺼 아무것도 할이 주제에

이전 게시물은 다음과 같은 접근 방식을 제안 일어난. 내가 읽은 이전 게시물은이 문제를 극복하지 못했지만 누군가 성공 했습니까? 내가해야만 할 다른 것이 있습니까?

+1

부분적인 웨이크 잠금 장치의 경우 화면이 즉시 꺼져서는 안되며, 정상적인 시간 초과율 (예 : 30 초 후)이 지나야합니다. 그게 무슨 일이 일어나고있는거야, 아니면 화면에 머물고 있니? –

+0

[가능한 방법을 안드로이드 웨이크 록을 얻는 방법?] (http://stackoverflow.com/questions/2039555/how-to-get-an-android-wakelock-to-work) – t0mm13b

+1

@ t0mm13b, 그건 아니야. 이 문제의 중복. 기껏해야, 그 반대입니다. – 323go

답변

2

웨이크 잠금 장치로 화면이 꺼지지는 않습니다. 일반적으로 화면이 꺼지면 CPU가 잠자기 상태가되어 응용 프로그램이 일시 중지됩니다. PARTIAL_WAKE_LOCK이있는 경우 앱이 계속 실행되고 화면이 꺼지더라도 (자동 또는 수동 절전으로 인해) CPU가 활성화됩니다. 화면이 꺼진 후에도 데이터를 계속 처리해야하는 경우에만 사용하십시오. 어떤 종류의 후류 자물쇠를 획득하면 전력 낭비를 최소화 할 수 있다는 우려가 있습니다. 크게이 API의 사용에 의해 영향을받는 PowerManager docs

장치의 배터리 수명에서이 경고를 준수하는 것이 현명하다. 실제로는 이 필요하지 않은 한 PowerManager.WakeLock을 획득하지 마십시오. 가능한 한 최소 수준을 사용하고 최대한 빨리 으로 릴리스하십시오.

그래서 작업을 위해 잠자기 잠금 장치가 필요한 이유를 평가하는 것이 좋습니다. 그것이 권력을 너무 절약한다고 생각한다면 그것은 아닙니다.

+0

테스트 할 수있는 것을 제안한 A - C와 iagreen에게 감사드립니다. – blagdonman

+0

잠자기 잠금 장치가 어떻게 작동하는지 오해 한 것 같습니다. 예, 앱을 흔들어 사용자가 반응 할 수 있도록 화면이 꺼져있을 때 CPU를 계속 실행하고 싶습니다. – blagdonman

+0

사용자와 A - C가 예상 한대로 화면이 올바르게 (타임 아웃)됩니다. 그러면 앱을 계속 켜기 전에 기기의 전원을 켜고 잠금 화면을 지워야합니다. 블랙 - 아웃 중에 앱에 의해 "쉐이크"가 등록되지 않았습니다. 시도해야 할 몇 가지가 있지만 잘못된 방식으로 다루고 있다고 생각합니다. PARTIAL_WAKE_LOCK을 사용하면 CPU가 계속 작동하면서 잠금 화면이있는 동안에도 가속도계에 계속 응답 할 수 있기를 바랍니다. 헛된 희망. – blagdonman

3

그것은 활동의 onCreate 방법에서 이것을 사용하는 또 다른 방법보다 효율적이 될 것이다 :

효율적으로 웨이크 잠금을 사용하는 것이 더 좋은 방법입니다
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

.

+2

** onDestroy() 메소드에서 ** 플래그를 지우는 것을 잊지 마십시오. – Flawyte

+0

OP는 화면을 켜는 방법을 알고 싶지 않지만 꺼는 방법을 알고 싶어했습니다. 정답, 오답. – 323go

+0

@miNde 안드로이드는 활동이 파괴되면 자동으로 관리하므로 필요 없다고 생각합니다.Android 런타임이 잠금을 처리하고 있습니다. 앱이 포 그라운드에있을 때 wakelock이 처리됩니다. 그렇지 않으면 런타임에서 전방에 있지 않거나 파괴되면 런타임 잠금이 자동으로 해제됩니다! :) – t0mm13b