在android中,如何不在Orition之后重新创建活动?

在android中,如何不在Orition之后重新创建活动?,android,listview,orientation,Android,Listview,Orientation,我让该活动包含一个ListView,该ListView在onCreate()函数(使用AsyncTask)中填充来自web服务的数据。当屏幕方向改变时,活动被重新创建,我不希望这样。如何在更改方向后保持保存设置活动的AndroidManifest.xml中的android:configChanges=“orientation”。您需要将其添加到AndroidManifest.xml中的活动中。仅仅添加“方向”并不适用于所有设备 android:configChanges="orientation

我让该活动包含一个
ListView
,该
ListView
onCreate()
函数(使用
AsyncTask
)中填充来自web服务的数据。当屏幕方向改变时,活动被重新创建,我不希望这样。如何在更改方向后保持保存设置活动的AndroidManifest.xml中的android:configChanges=“orientation”。

您需要将其添加到AndroidManifest.xml中的活动中。仅仅添加“方向”并不适用于所有设备

android:configChanges="orientation|screenSize"

尽管其他答案建议使用
android:configChanges
,但我认为这实际上只是最后的选择,因为这意味着不同方向的资源不会自动加载

相反,您应该使用活动的
onSaveInstanceState
onretainonconfigurationInstance
函数。(如果使用片段,则应使用
setRetainInstance
而不是后一个选项。)

另一种选择是使用
ContentProvider
将使用
AsyncTask
下载的数据存储到数据库中,这样就不需要重新下载


您应该阅读以了解更多信息。

在蜂窝及以上设备上,您需要将
屏幕大小
添加到
配置更改
中。我不同意。他正在使用异步任务。这意味着他绝对不需要销毁它,因为AsyncTask不会被销毁,并且会继续运行,可能会导致崩溃和内存泄漏。当然,我不同意,我认为savedState总体上是一个更丑陋的黑客,但是如果你使用AsyncTasks或Threads,你必须使用configChanges。我认为他应该在一个保留的
片段
服务
中使用AsyncTask。在我看来,使用
android:configChanges
是一种黑客行为,因为它会阻止加载任何特定于方向的资源,尽管在这种情况下这可能不是问题,但在进行主细节活动时可能会是一个真正的问题。创建服务,除非其目的是加载跨活动的数据,这绝对是错误的。您正在创建一个完全不需要的上下文和复杂性。把它放在片段中并不能解决任何问题,因为方向的改变也会破坏片段,假设它在XML中(这是正确的方法)。这里的问题是,谷歌做出了一个可怕的设计决定,整个旋转破坏(和键盘滑动等)的事情,我们需要解决它。你可以用最简单的方法去做——关掉它。