这是我的一项活动中的一个小代码。
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);
我已将清单设置为允许使用WAKE_LOCK。现在,我不确定的是在一个活动中设置的标志。
如果许多活动中的一个向窗口“添加”一个标志,如屏幕保护标志,它们是否在整个应用程序中持久存在?
我的预感是,如果活动要设置或添加标志,则仅当标记的活动处于活动状态时,该标志才有效。如果它调用Intent来启动另一个活动(没有指定标志),则set标志将被取消,直到有意的,未标记的活动结束,然后它可以恢复到标记活动中的原始设置状态。
我错了吗?提前谢谢。
答案 0 :(得分:5)
有趣的问题最好通过实验解决:
我只是通过编写一个带有两个活动的小应用程序来测试它,一个通过单击按钮打开另一个。我已将屏幕超时设置为15秒。
Activity1包含用于在其onCreate()
方法中保持屏幕的命令,而Activity2则不包含。现在,当Activity1可见时,屏幕不会关闭(显然)。我打开Activity2后15秒,确实如此。所以你是对的,只要显示活动,Flag就有效。
有趣的是,你是否在Activity1上调用finish()
并不重要。即使Activity1未被销毁(onDestroy()
未被调用,仅onPause()
),该标志也将无效。
如果返回到第一个活动onCreate()
实际上没有在Activity1上再次调用,但是Flag再次有效(因为活动是从具有先前功能的堆栈中恢复的)。
答案 1 :(得分:4)
活动开始时Window
始终会重置onCreate
。您不会将标志添加到某个全局应用程序窗口状态。
您需要分别为每个Window
设置Activity
。
如果它调用Intent来启动另一个活动..
..销毁了调用Activity
并创建了新的Activity
。新的窗口有一个重置窗口,一旦你回到初始Activity
,窗口就会重置。但是,您应该调用onCreate
,然后再次设置Window
。