为什么使用android:configChanges是一种糟糕的做法
我已经阅读了处理轮换和为什么使用android:configChanges是一种糟糕的做法,android,android-asynctask,android-manifest,screen-rotation,Android,Android Asynctask,Android Manifest,Screen Rotation,我已经阅读了处理轮换和AsyncTask的不同帖子和问题。在每篇文章中都提到使用android:configChanges 这是一种坏习惯。但我并没有找到它被劝阻的真正原因,以及为什么它是一种不好的做法。如果我们使用android:configChanges来处理方向,那么缺点是什么 注意: 我知道已经回答了如何处理定向和AsyncTask。但我想知道为什么不使用android:configChanges 嗯,您需要记住,活动可以由于多种原因重新启动 例如,其中一个原因是当你的应用程序在后台时,
AsyncTask
的不同帖子和问题。在每篇文章中都提到使用android:configChanges
这是一种坏习惯。但我并没有找到它被劝阻的真正原因,以及为什么它是一种不好的做法。如果我们使用android:configChanges
来处理方向,那么缺点是什么
注意:
我知道已经回答了如何处理定向和
AsyncTask
。但我想知道为什么不使用android:configChanges
嗯,您需要记住,活动
可以由于多种原因重新启动
例如,其中一个原因是当你的应用程序在后台时,操作系统决定杀死它(当然是通过你的活动)以回收内存
当您返回应用程序时,操作系统将尝试在您离开时重新创建您的活动
,但将失败,因为您决定不使用它,只是在清单中使用了android:configChanges
如果您确保您的应用程序可以从重启中正确恢复,android:configChanges
可能根本不需要。因此,需要使用android:configChanges
可能表明您的应用程序中存在一些缺陷,值得一看
使用android:configChanges
并不是一种不好的做法,但如果您不完全了解自己在做什么,它很容易做到。总结一下我从@user13-answer和其他stackoverflow问题以及博客帖子中得到的所有信息,我想分享我的发现,以澄清一些非常重要的方面
(用户13)使用android:configChanges并不是一个坏习惯,但如果你不清楚自己在做什么,它很容易做到
使用此技术会使您无法轻松使用特定于配置的资源。例如,如果您希望您的布局、可绘制内容、字符串或其他内容在纵向和横向上有所不同,那么如果您使用android:configChanges
,您必须自己管理它
如果您决定使用android:configChanges
正如user13所提到的,重新创建活动不仅仅是因为方向改变,还有多种原因导致活动可以重新启动。因此,无论何种原因,都应处理活动重启。使用android:configChanges
仅处理一种情况,并且会有未处理的活动重启情况,这将导致潜在的错误
有多种更好的方法来处理活动重启,stactoverflow上也提供了大量帮助,因此根据文档,android:configChanges应作为最后手段使用
如果您知道自己在做什么,那么使用android:configChanges是一种很好的做法
只要始终测试应用程序在系统重新启动时的行为,让用户感到舒适,就可以一直保存一些状态,但不是全部。
使用如下配置更改:
android:configChanges=“locale |键盘|键盘隐藏|方向|屏幕布局| uiMode |屏幕大小|最小屏幕大小”
您的应用程序很少会在具有大量内存的新设备上重新启动。若它重新启动,那个么对用户来说并不是那个么意外,因为用户在别处引起了注意,然后又回到了应用程序。用户不必在重新启动后处于完全相同的状态。如果由于用户正在执行一些其他繁重的任务(玩游戏)而手动终止应用程序或重新启动应用程序,则用户体验在这里很重要
如果需要仅为不同布局刷新列表以更改方向,或者需要隐藏某些视图元素,则可以调用:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
_list.reloadData();
_editorButton.visible(isPortrait());
}
(我使用我的自定义类,但你明白了这一点)请看:其中一个原因是,你将禁用Android的默认行为,你真的必须注意将所有字符串都保存在手中。因此,更好的做法是按照框架的规则来采用代码,而不是与之抗争。但是,在某些情况下,它是好的并且是唯一的解决方案,因此它并不都是“1”或“0”。