Android窗口标志:在整个应用程序本身中,活动中的标志是否持久存在?

时间:2012-09-04 08:21:47

标签: android android-activity flags

这是我的一项活动中的一个小代码。

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标志将被取消,直到有意的,未标记的活动结束,然后它可以恢复到标记活动中的原始设置状态。

我错了吗?提前谢谢。

2 个答案:

答案 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