1

我有一个正在播放电视流的应用程序,需要一直打开。我确实在 OnCreate() 中获得了唤醒锁

pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, TAG);
wl.acquire();

然后在 onDestroy() 中释放

if (wl != null) {
    wl.release();
    wl = null;
}

用户通常通过按返回、主页或电源按钮来最小化应用程序,然后点击应用程序图标从主屏幕恢复。我确实在 onPause() 中释放唤醒锁并在 onResume() 中获取。

有时我会看到应用程序崩溃或完全从屏幕上消失,并且我会看到与唤醒锁定相关的日志。

这是控制 Android 电源管理器唤醒锁的最佳做法吗?

欢迎任何意见。

4

4 回答 4

3

正如您所说,您确实释放了唤醒锁定onPause()并获取onResume()。这是一个很好的做法,但是除了这些我建议你也释放唤醒锁onUserLeaveHint()

onUserLeaveHint()

@Override
protected void onUserLeaveHint() {

try {
     // your code.

     // release the wake lock
     wl.release();

    }catch(Exception ex){
     Log.e("Exception in onUserLeaveHint", ex.getMessage);
    }
    super.onUserLeaveHint();
}
于 2013-08-30T09:51:22.823 回答
2

然后在 setContentView 之后的 oncreate 中使用它:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

应该有帮助。

于 2013-08-30T09:43:09.120 回答
1

除了 silvia_aut 的回答,请尝试

if (wakelock.isHeld())
       wakelock.release();
于 2013-08-30T09:36:26.347 回答
0

尝试这个:

wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");

并且不要忘记权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />
于 2013-08-30T09:25:27.977 回答