我有一个需要在启动时打开屏幕(如果关闭了)的活动。
因此,在onCreate中,我有:
this.getWindow().setFlags(
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
通过在广播接收器中使用wakelock,我能够使我的活动在从广播接收器启动时显示。
但是问题非常奇怪,活动生命周期在这种方式下调用,即在启动活动后立即调用onPause()和onResume()。
- onCreate
- onStart
- onResume
- onPause
- onStop
- onStart
- onResume
因此,在启动和恢复时调用两次,同时还调用了onStop,我想在onStop()中实现一些逻辑,但是由于这种行为,应用程序将无法正常工作。
编辑
我发现问题只出现在FLAG_SHOW_WHEN_LOCKED标志下,当设备被锁定时会发生。并且仅在启动活动之前锁定设备时才会发生。
PS:我正在使用带有广播接收器的闹钟管理器,然后从广播接收器启动活动。
FLAG_SHOW_WHEN_LOCKED
,已投赞成。 - Mohammad Ersanif (isDeviceSleeping) { if (System.currentTimeMillis() - startTime < 2000) { return; } }
} - Mohammad Ersan