【问题标题】:Android: screen rotation, on destroy and services connundrumAndroid:屏幕旋转,销毁和服务难题
【发布时间】:2012-02-08 01:48:09
【问题描述】:

我已经修改了 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 rotation screen ondestroy


    【解决方案1】:

    如果您在 Manifest 中添加“android:configChanges="orientation"” 以防止 Activity 被销毁和重新创建,您可能需要实现该方法:

    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");
        }
    }
    

    【讨论】:

    • 太棒了。我在谷歌上搜索了一个小时后才发现类似的东西,但你的答案更详细(帮助记录)我最后也添加了这个:setContentView(R.layout.main); 谢谢!
    【解决方案2】:

    要添加到@alex.veprix 的要点(我必须提到正确)答案,如果您正在为 API 级别 13 或更高级别的设备构建,请不要忘记按以下方式添加 ScreenSize 属性:@ 987654322@

    详情请看:http://developer.android.com/guide/topics/manifest/activity-element.html

    【讨论】:

      【解决方案3】:

      推荐的方法是让 TaskFragment 处理您的逻辑,然后对您的活动进行一些回调以与您的 UI 同步。

      更详细的解释见以下网站:http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-22
        相关资源
        最近更新 更多