Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么使用android:configChanges是一种糟糕的做法_Android_Android Asynctask_Android Manifest_Screen Rotation - Fatal编程技术网

为什么使用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”。