2

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

Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

我已经将清单设置为允许使用 WAKE_LOCK 的权限。现在,我不确定的是在一项活动中设置的标志。

如果许多活动之一向窗口“添加”一个标志,例如屏幕保护程序标志,它们是否会在整个应用程序中持续存在?

我的预感是,如果某个活动要设置或添加一个标志,则该标志仅在标记的活动处于活动状态时才处于活动状态。如果它调用一个 Intent 来启动另一个活动(它没有指定标志),那么设置的标志将被取消,直到有意图的、未标记的活动完成,然后它可能会在标记的活动中恢复到其原始设置状态。

我错了吗?提前致谢。

4

2 回答 2

5

Window活动开始时始终重置 ( ) onCreate。您不会将标志添加到某些全局应用程序窗口状态。

您需要分别Window为每个设置Activity

如果它调用一个 Intent 来启动另一个活动..

..调用Activity被破坏并Activity创建一个新的。新的有一个重置窗口,一旦你回到初始状态Activity,它就会再次重置窗口。但是您应该onCreate在可以Window再次设置的地方被调用。

于 2012-09-04T08:46:40.777 回答
5

有趣的问题最好通过实验来解决:

我只是通过编写一个带有两个活动的小应用程序来测试它,一个通过单击按钮打开另一个。我已将屏幕超时设置为 15 秒。

Activity1 在其方法中包含保持屏幕打开的命令onCreate(),而 Activity2 没有。现在,虽然 Activity1 可见,但屏幕并没有关闭(显然)。我打开 Activity2 15 秒后,它确实如此。所以你是对的,标志只有在显示活动时才有效。

有趣的是,您是否调用finish()Activity1 并不重要。即使 Activity1 没有被销毁(onDestroy()没有被调用,只是onPause()),该标志也将是无效的。

如果您返回第一个 ActivityonCreate()实际上并没有在 Activity1 上再次调用,但 th Flag 再次有效(因为该 Activity 是从具有其先前功能的堆栈中恢复的)。

于 2012-09-04T09:01:10.493 回答