我在我的应用程序中使用Wakelock来防止手机在应用程序可见时睡觉。
当方向发生变化,系统破坏并在景观模式下重新创建应用程序时,问题就出现了。如果后台的唤醒计时器已过期,则系统会将“唤醒”的发布作为关闭屏幕的机会。
编辑:我应该提到,我正在设置wakelock onResume,并发布onPause --据我所知,有必要发布该应用程序,以防止其泄漏唤醒锁。
我需要唤醒才能继续改变方向。
下面我概述了这方面的解决方案。这是处理它的首选方法吗?还有其他选择吗?
创建一个包含唤醒(而不是活动)的服务,当该活动解除绑定时,该服务启动一个倒计时计时器(例如10秒),如果该活动不重新绑定,它将在计时器过期时释放该计时器。如果它是一个简单的方向改变,活动将在10秒内重新绑定,因此维护唤醒锁,如果没有,那么唤醒锁将被释放。
谢谢。
发布于 2010-01-13 17:27:16
不要使用WakeLock,而是尝试使用getWindow().setFlags()标志WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON。
如果后台的唤醒计时器已过期,则系统会将唤醒卡的发布作为关闭屏幕的机会。
根据定义,用户已经与设备进行了交互,因此屏幕应该因为这个原因而不受任何其他因素的影响。
发布于 2014-02-05 00:20:56
我就是这么做的..。
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "DoNotDimScreen");然后是..。
wl.acquire();..。当你需要激活唤醒锁的时候。
“PowerManager.ON_AFTER_RELEASE”标志戳入用户活动计时器,以便在释放此唤醒锁时屏幕保持较长时间,当您的活动在改变方向时被破坏时就是如此。
对我来说没问题!
发布于 2014-06-30 10:24:12
我做这件事实际上从来没有释放过警钟。相反,我通过超时来获得它。
private PowerManager.WakeLock wl;
protected void onStart(Bundle savedInstanceState) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Words counter");
// disable reference counting, as acquire/release calls are not paired
wl.setReferenceCounted(false);
wl.acquire();
}
protected void onStop() {
// acquire for few seconds to keep lock until onStart is called with new orietnation
wl.acquire(3000);
}相对于其他方法的优势:
与SCREEN_DIM_WAKE_LOCK
https://stackoverflow.com/questions/2058712
复制相似问题