我正在尝试找到一种方法来正确处理设置活动,该活动的方向由启动它的意图中的数据确定。这是一款用户可以选择关卡的游戏,其中一些是纵向的,有些是横向的。我面临的问题是setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
在活动完全加载之前不会生效。这对我来说是个问题,因为我在启动过程中做了一些加载和图像处理,我只想做一次。
目前,如果用户选择横向级别:
- 活动开始 onCreate(),默认为纵向
- 分析它的启动意图发现它应该是横向的
- 继续进行到 onResume()、加载信息和执行其他设置任务
- 此时 setRequestedOrientation 启动,因此应用程序通过 onPause() 运行到 onDestroy()
- 然后它再次从 onCreate() 启动并运行到 onResume() 重复之前的设置
有没有办法避免这种情况并且让它不执行两次加载?例如,理想情况下,活动会在调用 onCreate 之前就知道它应该是横向还是纵向,具体取决于启动意图的某些属性,但除非我错过了一些不可能的事情。我已经设法通过在耗时的加载步骤之前检查 a 来避免重复加载boolean
,但这似乎不是正确的方法。我想我可以覆盖onSaveInstanceState
,但这需要大量额外的编码。有没有一种简单的方法可以做到这一点?
谢谢!
解决方案:
根据丹尼尔的回答,这实际上很容易解决。我只需要做一些小改动。在我的“菜单”活动中,玩家可以选择玩哪个关卡,我只需要添加一个 if/else 检查来选择哪个类将由我的 Intent 启动。这是通过一个代表纵向或横向的简单 int 完成的,由玩家选择关卡时确定。然后我创建了第二个类来扩展我的“GameLogic”类;这是包含游戏本身大部分代码的类,而不是菜单、说明等。
public class GameLandscape extends GameLogic{
}
从字面上看,就是这么简单,完全是空的。这样,它继承了我之前的活动中的所有代码,我已经对其进行了编码,以根据方向以不同的方式处理事情。最后,我只需要在清单中添加一行,说明 GameLandscape 将始终以横向运行,而 GameLogic 将始终以纵向运行。
所以确实是一个简单的问题。