为什么使用 android:configChanges 是一种不好的做法

why using android:configChanges is a bad practice

我经历了不同的 post 处理轮换和 AsyncTask 的问题和问题。在每个 post 中都提到使用 android:configChanges 是一种不好的做法。但是我没有找到不鼓励这样做的真正原因以及为什么这是一种不好的做法。如果我们使用android:configChanges来处理方向有什么缺点。

注: 我知道已经回答了如何处理方向和 AsyncTask。但我想知道不使用 android:configChanges 的原因。

嗯,您需要记住 Activity 可以出于多种原因重新启动。

例如,这些原因之一是当您的应用程序在后台并且 OS 决定终止它(当然是您的 Activity)以回收内存。

当您 return 进入您的应用程序时,OS 将尝试在您离开时重新创建您的 Activity,但不会这样做,因为您决定不打扰有了它,只需在您的清单中使用 android:configChanges

如果您确保您的应用程序可以从重启中正常恢复,则 android:configChanges 可能根本没有必要。因此,需要 才能使用 android:configChanges 可能表明您的应用程序存在一些缺陷,值得一看。

使用 android:configChanges 不是坏习惯,但如果您不完全理解自己在做什么,它很容易成为坏习惯。

为了总结我从@user13 的回答和其他 Whosebug 问题和博客文章中得到的所有内容,我想分享我的发现以清除一些非常重要的方面。

  1. (user13) 使用 android:configChanges 并不是坏习惯,但如果您不完全理解自己在做什么,它很容易成为坏习惯

  2. 使用此技术可防止您轻松使用特定于配置的资源。例如,如果您希望您的布局或可绘制对象或字符串或其他任何东西在纵向和横向上有所不同,如果您使用 android:configChanges,则必须自己管理它。

  3. 如果您决定使用 android:configChanges
  4. ,您需要覆盖并使用 onConfigurationChanged() 方法来执行特定操作
  5. 正如 user13 提到的那样,Activity 不仅是由于方向改变而重新创建的,而且 activity 可以重新启动的原因有多种。因此 activity 应针对所有原因处理重启。使用 android:configChanges 只能处理一种情况,并且会有未处理的情况 activity 重新启动,这将导致潜在的错误。
  6. 有多种更好的方法来处理 activity 重新启动,stactoverflow 上也提供了大量帮助,因此根据文档,android:configChanges 应作为最后的手段使用。

如果您知道自己在做什么,那么使用 android:configChanges 是一种很好的做法。

只要始终测试您的应用程序在系统重新启动时的行为方式,以使用户感到舒适,因此必须始终保存某些状态,但不是全部。 配置更改如下:

android:configChanges="locale|keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

您的应用程序在具有大量内存的新设备上很少会重新启动。如果它重新启动,无论如何对用户来说都不是那么意外,因为用户在其他地方已经注意到并返回到应用程序。如果由于用户正在执行其他一些繁重的任务(玩游戏)而手动终止应用程序或应用程序重启,用户不必在重启后处于完全相同的状态,用户体验在这里很重要。

如果您需要为方向更改的不同布局刷新列表,或者您需要隐藏一些视图元素,您可以调用:

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    _list.reloadData();
    _editorButton.visible(isPortrait());
}

(我使用我的习惯 类 但你明白了)