为什么不总是使用android:configChanges=";键盘隐藏“方向”;?

为什么不总是使用android:configChanges=";键盘隐藏“方向”;?,android,android-layout,Android,Android Layout,我想知道为什么不在每个(几乎每个;)活动中使用android:configChanges=“keyboardHidden | orientation” 货物: 不用担心你的活动被轮换了 更快 不太好: 如果布局取决于屏幕大小,则需要更改布局(例如,具有两列左右的布局) 坏的: 在不同的方向上没有灵活的布局方式 使用片段时不太好 但是如果我们不使用不同的布局,为什么不呢?从我的观点来看:如果布局在横向和纵向模式下都是相同的,那么您也可以在应用程序中禁用其中一种 我之所以这样说,是因为作

我想知道为什么不在每个(几乎每个;)活动中使用android:configChanges=“keyboardHidden | orientation”

货物:

  • 不用担心你的活动被轮换了
  • 更快
不太好:

  • 如果布局取决于屏幕大小,则需要更改布局(例如,具有两列左右的布局)
坏的:

  • 在不同的方向上没有灵活的布局方式
  • 使用片段时不太好

但是如果我们不使用不同的布局,为什么不呢?

从我的观点来看:如果布局在横向和纵向模式下都是相同的,那么您也可以在应用程序中禁用其中一种

我之所以这样说,是因为作为一名用户,我希望当我改变方向时,应用程序能给我带来一些好处。如果我拿手机的方式不重要,那么我就不需要选择

例如,在一个应用程序中,您有一个ListView,单击一个ListItem时,您希望显示该项目的详细视图。在横向视图中,您可以将屏幕一分为二,左侧是ListView,右侧是detailed视图。在纵向视图中,您将在一个屏幕中显示列表,然后在选择列表项时将屏幕更改为详细视图。在这种情况下,方向的改变以及不同的布局都是有意义的。

Quick Background 默认情况下,当Android上发生某些关键配置更改时(一个常见的例子是方向更改),Android会完全重新启动正在运行的活动,以帮助其适应这些更改

当您在AndroidManifest中定义android:configChanges=“keyboardHidden | orientation”时,您告诉android:“拔出键盘或旋转手机时,请不要进行默认重置;我想自己处理。是的,我知道我在做什么”

这是好事吗?我们很快就会看到

别担心? 你开始时的优点之一是:

不用担心你的活动被轮换了

在许多情况下,人们错误地认为,当方向改变(“旋转”)产生错误时,他们只需输入
android:configChanges=“keyboardHidden | orientation”
即可修复错误

然而,android:configChanges=“keyboardHidden | orientation”只不过是一张绷带。事实上,有很多方法可以触发配置更改。例如,如果用户选择一种新语言(即语言环境已更改),您的活动将以与方向更改相同的方式重新启动。如果你想,你可以查看

编辑:更重要的是,正如评论中所指出的,当你的应用程序在后台,Android决定通过关闭它来释放一些内存时,你的活动也会重新启动。当用户返回到您的应用程序时,Android将尝试重新启动活动,方法与在其他配置发生更改时相同。如果你不能处理,用户将不会高兴

换句话说,使用android:configChanges=“keyboardHidden | orientation”并不能解决你的“担忧”。正确的方法是对你的活动进行编码,让他们对android抛出的任何重启感到满意。这是一个很好的实践,它将帮助你走下去,所以要习惯它

那我什么时候用呢? 正如你提到的,这有一个明显的优势。通过自己处理来覆盖旋转的默认配置更改将加快速度。然而,这种速度确实是以方便为代价的

简单地说,如果你对纵向和横向都使用相同的布局,那么通过覆盖,你就处于良好的状态。视图不会完全重新加载活动,而是简单地四处移动以填充剩余空间

但是如果由于某种原因,当设备处于横向时,您使用不同的布局,那么安卓重新加载您的活动是好的,因为它将加载正确的布局。[如果您在这样的活动上使用覆盖,并且希望在运行时进行一些神奇的重新布局…那么,祝您好运-这远不简单]

快速总结
无论如何,如果
android:configChanges=“keyboardHidden | orientation”
适合您,请使用它。但是请务必测试当某些事情发生变化时会发生什么,因为方向改变不是触发完全活动重启的唯一方式。

是的,我认为暂停会比释放玩家更快。不过还是有停顿的时候

现在,我们找到了一个解决方案,不会暂停歌曲

在清单中声明您将处理屏幕方向的配置更改,然后使用onConfigurationChanged方法加载布局文件。通过在logCat中执行此操作,我可以看到onPause、onCreate和onResume没有被调用,因此歌曲没有暂停

  • 更新清单以处理方向

    android:configChanges="orientation|screenSize"
    
  • 添加此代码

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        // TODO Auto-generated method stub      
        super.onConfigurationChanged(newConfig);        
        setContentView(R.layout.activity_main);
    }
    

  • 我不明白为什么。。。。在我看来,偶尔重启是可以的。。。configChanges为我处理大多数情况。。。在某些类型的应用程序中,这可能是个问题,但这实际上取决于应用程序的类型以及应用程序重新启动时如何恢复状态。。。当我的一个应用程序重新启动时,用户被重新登录,最后一个活动由我的代码打开,用户将失去一些返回到他所在位置的步骤,但这没什么大不了的。。在另一种情况下,某些状态总是保持不变,而某些状态总是在重新启动时恢复。当活动重新启动时,必须是应用程序未被使用或其他原因。。。所以没问题。。。例如,在游戏中,这可能是一个问题,或者在其他类型的应用程序中,我不知道

    我说当你这样做的时候,应用程序在正常情况下运行良好。代码是mu