Android 安卓:屏幕旋转、破坏和服务连接

Android 安卓:屏幕旋转、破坏和服务连接,android,rotation,screen,ondestroy,Android,Rotation,Screen,Ondestroy,我已经修改了SDK演示中的蓝牙聊天示例,以便能够控制arduino供电的蓝牙LED矩阵。使用聊天程序,我可以通过蓝牙向显示屏发送信息。不过我有个问题。我做了两个屏幕布局,一个是肖像画,一个是风景画。这样,无论方向如何,我都可以让界面占据手机上的大部分空间 问题是,如果手机旋转,将调用OnDestroy(),以重新加载新布局(横向或纵向)。在OnDestroy()例程中,如果建立了蓝牙链接,我也会破坏它: public void onDestroy() { super.onD

我已经修改了SDK演示中的蓝牙聊天示例,以便能够控制arduino供电的蓝牙LED矩阵。使用聊天程序,我可以通过蓝牙向显示屏发送信息。不过我有个问题。我做了两个屏幕布局,一个是肖像画,一个是风景画。这样,无论方向如何,我都可以让界面占据手机上的大部分空间

问题是,如果手机旋转,将调用OnDestroy(),以重新加载新布局(横向或纵向)。在OnDestroy()例程中,如果建立了蓝牙链接,我也会破坏它:

   public void onDestroy() {
        super.onDestroy();
        // Stop the Bluetooth chat services
        if (mChatService != null)
            mChatService.stop();
        if (D)
            Log.e(TAG, "--- ON DESTROY ---");
    }
阅读这里的其他帖子,我发现您可以通过在清单中添加“android:configChanges=“orientation”来防止服务停止。这样,当我旋转屏幕时,我与显示器的蓝牙链接不再终止,但现在屏幕不会在横向模式下重新绘制

为了解决这个问题,我正在考虑删除“if mchatservice…”部分,该部分将终止连接,但我仍然需要在应用程序最终退出时运行代码

是否有办法在旋转时重新绘制屏幕,而不终止连接?如果没有,我想我总是可以将服务代码移动到OnPause()事件,但是如果应用程序失去焦点,这将终止连接

还有别的办法吗

谢谢。

如果您将“android:configChanges=“orientation”添加到清单中以防止活动被破坏和重新创建,您可能需要实现以下方法:

public void onConfigurationChanged(Configuration newConfig)
每次更改系统配置时,即当您旋转手机并更改方向时,都会执行此方法。在此方法中,您可以为活动重新应用新布局:

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

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Log.e(TAG, "ORIENTATION_LANDSCAPE");
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        Log.e(TAG, "ORIENTATION_PORTRAIT");
    }
}

要添加到@alex.veprix(我必须指出这是正确的)答案,如果您正在为API级别为13或更高的设备进行构建,请不要忘记按以下方式添加屏幕大小属性:
android:configChanges=“orientation | ScreenSize”


此处的详细信息:

建议使用一个TaskFragment来处理您的逻辑,然后对您的活动进行一些回调以与UI同步


有关详细说明,请参见以下网站:

Awesome。在谷歌上搜索了一个小时后,我发现了类似的东西,但你的答案更详细(有助于记录),我最后也添加了这个:
setContentView(R.layout.main)谢谢!