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

时间:2016-06-13 10:11:55

标签: android android-asynctask android-manifest screen-rotation

我已经完成了处理轮换和AsyncTask的不同帖子和问题。在每篇文章中都提到使用android:configChanges 是一种不好的做法。但我没有找到为什么气馁的实际原因以及为什么这是一个不好的做法。如果我们使用android:configChanges来处理方向,会有什么不利。

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

3 个答案:

答案 0 :(得分:7)

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

例如,其中一个原因是当你的应用程序在后台并且操作系统决定将其终止时(当然使用Activity)来回收内存。

当您返回应用时,操作系统将尝试在您离开时重新创建Activity,但未能这样做,因为您决定不打扰它,只使用了android:configChanges在你的清单中。

如果确保您的应用可以在重新启动后正常恢复,则可能根本不需要android:configChanges。因此,需要使用android:configChanges可能表示您的应用存在一些缺陷,值得一看。

使用android:configChanges并不是一种不错的做法,但如果您不确切地了解自己正在做什么,那么很容易实现。

答案 1 :(得分:2)

总结我得到的所有形式@ user13回答和其他stackoverflow问题和博客文章我想分享我的发现,以清除一些非常重要的方面。

  1. (user13)使用android:configChanges是不错的做法,但如果你不明白你在做什么就很容易做到

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

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

答案 2 :(得分:1)

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

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

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

您的应用程序将很少在具有大量内存的新设备上重新启动。如果它重新启动它对用户来说并不是那么出乎意料,因为用户在其他地方已经注意并回到应用程序。如果由于用户正在进行的其他繁重任务(玩游戏)手动查杀应用程序或应用程序重启,用户不必在重新启动后处于完全相同的状态,用户体验在这里很重要。

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

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

(我使用自定义类但你明白了)