如何防止从方向更改重新启动?

时间:2015-04-24 18:57:40

标签: android multithreading

这是我申请的结构。

MainActivity.java calls FragmentActivity.java,
FragmentActivity.java calls GameView.java
GameView.java calls Thread.java.

基本上所有游戏逻辑都将由GameView及其线程处理。 当方向改变时,我不知道如何防止重新启动游戏。

如果我暂停线程并恢复它,应用程序崩溃,我也不能在Gameview.java中使用onSaveInstanceState方法

任何帮助?

3 个答案:

答案 0 :(得分:1)

完全有可能通过Android清单。 只需添加活动声明,您要在其中禁用重新启动以下属性:

android:configChanges="orientation|screenSize"

然后你可以覆盖活动中的onConfigurationChanged(),然后你就会收到刚发生的事件的回调。在您的情况下,方向更改。使用此方法,当您的方向发生变化时,活动不会重新开始。

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

答案 1 :(得分:0)

您正在寻找onResume()和暂停()...您在暂停时将值存储到一个包中,并在resume方法上实例化这些值并显示一个对话框,因为这会阻止用户注意到这一点。

答案 2 :(得分:0)

通过在清单文件中定义Application类并覆盖公共方法onConfigurationChanged(),您可以控制方向更改的内容。

  

需要维护全局应用程序状态的基类。   您可以通过在您的名称中指定其名称来提供自己的实现   AndroidManifest.xml的标记,它将导致该类   在你的过程中为你实例化   应用程序/包已创建。

您只需要检查newConfig == Configuration.ORIENTATION_LANDSCAPE等。此时,您可能需要重新加载资源以使工作正常。