我浏览了多篇处理旋转和 AsyncTask
的帖子和问题。每篇文章都提到使用 android:configChanges
是一种不好的做法。但我没有找到它为什么被反对以及为什么是个不好的做法的实际原因。如果我们使用 android:configChanges
来处理方向,那么有哪些缺点呢?
注意:
我知道如何处理方向和 AsyncTask
,但我想知道不使用 android:configChanges
的原因。
我浏览了多篇处理旋转和 AsyncTask
的帖子和问题。每篇文章都提到使用 android:configChanges
是一种不好的做法。但我没有找到它为什么被反对以及为什么是个不好的做法的实际原因。如果我们使用 android:configChanges
来处理方向,那么有哪些缺点呢?
注意:
我知道如何处理方向和 AsyncTask
,但我想知道不使用 android:configChanges
的原因。
请记住,一个Activity
可能会因多种原因而重新启动。
例如,其中的一个原因是当你的应用程序处于后台时,操作系统决定终止它(包括你的Activity
)以释放内存。
当你返回到你的应用程序时,操作系统将尝试像你离开时一样重新创建你的Activity
,但由于你决定不去烦恼它,只是在清单文件中使用了android:configChanges
,所以操作系统会失败。
如果你确保你的应用程序可以从重新启动中正确恢复,那么android:configChanges
可能根本不需要。因此,使用android:configChanges
的需要可能表明你的应用程序存在一些缺陷,值得检查。
使用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());
}