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

问题描述:

我的活动包含一个ListView,并且此listview充满来自网络服务的数据onCreate()函数(使用AsyncTask)。当屏幕方向改变时,活动重新创建,我不想那样。如何在更改方向后保存保存如何不在android中orintation之后重新创建活动?

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

android:configChanges="orientation|screenSize" 

在您的AndroidManifest.xml中为该活动设置android:configChanges="orientation"

+0

在蜂窝和上面的设备上,您需要将'screenSize'添加到'configChanges'。 – 2013-05-09 20:44:25

虽然其他答案使用android:configChanges建议,我会说这是真的只是一个不得已的选择,因为它意味着不同方向的资源将不会自动加载。

相反,您应该使用您的活动的onSaveInstanceStateonRetainNonConfigurationInstance功能。 (如果您使用的片段,你应该使用setRetainInstance而不是选择后者的。)

另一种选择是使用ContentProvider来存储您下载使用AsyncTask到一个数据库中的数据,因此不需要重新无论如何,下载。

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

+0

我不同意。他正在使用异步任务。这意味着他绝对不需要销毁它,因为AsyncTask不会被销毁并继续运行,可能会导致崩溃和内存泄漏。当然,我不同意并认为savedState总体上是一种丑陋的黑客攻击,但如果使用AsyncTasks或线程,则必须使用configChanges。 – 2013-05-09 21:30:06

+0

那么,我认为他应该在保留的'Fragment'或'Service'中使用AsyncTask。使用'android:configChanges'是我眼中的黑客,因为它阻止了任何方向特定的资源被加载,虽然在这种情况下可能不是问题,但在进行主从细节活动时它可能是一个真正的问题。 – 2013-05-09 21:37:58

+0

创建一个服务,除非其意图加载跨越活动的数据,否则在这里绝对是错误的。你正在创造一个完全不需要的上下文和复杂性。把它放在片段中并不能解决任何问题,因为方向的改变也会破坏片段,并假定它在XML中(这是正确的方式)。这里的问题是Google做出了一个可怕的设计决定,包括旋转(和键盘滑出等)的全部破坏,我们需要解决它。你尽可能以最简单的方式做到这一点 - 关闭它。 – 2013-05-09 22:46:55