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

商品:

  • 无需担心您的 Activity 被轮换
  • 更快

  • 不太好:

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

  • 坏的:
  • 没有灵活的方法来在不同方向上具有不同的布局
  • 使用片段时
  • 不太好

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

    最佳答案

    快速背景

    默认情况下,当Android上发生某些关键配置更改时(常见的例子是方向更改),Android会完全重启正在运行的Activity,以帮助其适应此类更改。

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

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

    不用担心?

    您开始使用的优点之一是:



    在许多情况下,人们会错误地认为,当他们遇到因方向更改(“旋转”)而产生的错误时,只需放入android:configChanges="keyboardHidden|orientation"即可解决该错误。

    但是,android:configChanges =“keyboardHidden | orientation”只是创可贴。实际上,可以通过多种方式触发配置更改。例如,如果用户选择一种新的语言(即,语言环境已更改),您的 Activity 将以与更改方向相同的方式重新启动。如果需要,可以查看a list of all the different types of config changes

    编辑:更重要的是,正如hackbod在评论中指出的那样,当您的应用程序在后台运行时,您的 Activity 也会重新开始,而Android决定通过杀死它来释放一些内存。当用户返回您的应用程序时,Android将尝试以与其他配置更改相同的方式重新启动 Activity 。如果您无法处理-用户将不会满意...

    换句话说,使用android:configChanges="keyboardHidden|orientation"并不是解决“后顾之忧”的方法。正确的方法是对您的 Activity 进行编码,以使他们对Android重新启动时感到满意。这是一个很好的做法,它将对您有所帮助,因此请习惯它。

    那么我什么时候应该使用它呢?

    正如您提到的,它有明显的优势。通过自己处理轮换来覆盖默认配置更改将加快处理速度。但是,这种速度确实带来了便利。

    简而言之,如果您对纵向和横向使用相同的布局,则覆盖会保持良好状态。无需完全重新加载 Activity , View 将只是四处移动以填充剩余空间。

    但是,如果由于某种原因您在设备处于横向时使用了不同的布局,则Android重新加载您的Activity的事实很好,因为它随后将加载正确的布局。 [如果您在此类Activity上使用覆盖,并希望在运行时进行一些神奇的重新布局...好吧,祝您好运-这远非简单]

    快速总结

    无论如何,如果android:configChanges="keyboardHidden|orientation"适合您,请使用它。但是请务必进行测试,以确保发生某些更改时会发生什么,因为方向更改并不是触发完整的Activity重新启动的唯一方法。

  • 10-07 19:27
    查看更多