3

我一直在努力解决这个问题。
尽管我在 Orientation Change 上阅读了很多内容,但 Android 会杀死一个活动并将其作为一个新的活动启动,而处理此问题的唯一方法是将所有内容保存在里面onSaveInstanceState()并尝试在里面恢复它onCreate()

但是我的活动在不同的时间做了很多不同类型的网络活动,如果在执行网络活动时方向发生了变化,我将不得不处理很多不同和复杂的场景。

有没有什么简单的方法可以让Android在改变方向时根本不需要重绘这个活动,以便它自动保存所有数据并重新使用它?

我想知道有没有这样的事情。

4

8 回答 8

11

android:configChanges="orientation"是的,您可以向文件中的活动声明添加属性AndroidManifest.xml

编辑:该android:configChanges属性的目的是防止在真正需要时重新创建活动。例如,Camera 应用程序使用此属性,因为当方向更改发生时,不得重新创建相机预览屏幕。用户希望在旋转设备时相机预览能够毫无延迟地工作,并且相机初始化不是一个非常快的过程。因此,相机应用程序手动处理方向更改是一种本机行为。

对于大多数应用程序,在方向更改期间是否重新创建活动并不重要。但有时由于活动创建速度慢、活动执行异步任务或其他一些原因,在此过程中持久化活动会更方便。在这种情况下,可以稍微调整应用程序并使用该android:configChanges="orientation"属性。但是,当您使用此调整时,真正重要的是要了解您必须实现正确保存和恢复状态的方法!

因此,总结一下这个答案,android:configChanges可以让您提高应用程序的性能或使其在某些极少数情况下表现得“本机”,但不会减少您必须编写的代码量。

于 2011-05-09T07:01:49.067 回答
6

But my activity does a lot and different kind of network activities at different times and if the orientation is changed when the network activity is being performed, I'll have to handle a lot of different and complex scenarios.

Then move that logic out of the activity and into a service.

于 2011-05-09T10:40:45.603 回答
4

Yes, you can add attribute android:configChanges="orientation" to the activity declaration in the AndroidManifest.xml file.

IMHO, it's better to declare android:configChanges="orientation|keyboard|keyboardHidden"

About the blog post you gave the link in another answers. I guess here is the answer:

If your application doesn't need to update resources during a specific configuration change and you have a performance limitation that requires you to avoid the Activity restart, then you can declare that your Activity handles the configuration change itself, which prevents the system from restarting your Activity.

I spoke as well with an android developer about this problem. And he meant following. If you don't have different layouts for landscape and portrait orientation, you can easy use configChanges.

于 2011-05-09T08:20:06.353 回答
2

I solved my problem by adding this to my activity in my manifest file

android:configChanges="keyboardHidden|orientation|screenSize"

于 2013-03-10T16:45:07.907 回答
1

刚刚回答了这个问题:Android - 屏幕方向重新加载活动

在您的情况下,您希望完全阻止 Android 杀死您的 Activity。您需要更新清单以捕捉方向变化,然后实现方向变化回调以在发生方向变化时实际执行您需要做的任何事情(可能什么都没有)。

于 2011-05-09T07:01:56.373 回答
1

android:screenOrientation="portrait"在清单中的活动标签中将锁定您的方向。

检查此链接以获取更多信息。

于 2011-05-09T07:02:10.547 回答
1

如果您在异步任务中进行大量网络连接,也许您应该使用onRetainNonConfigurationInstance() ans 然后在您的onCreate()方法中获取数据,如本教程本教程

于 2011-05-09T07:09:29.230 回答
1

add android:configChanges="orientation" to your activity in manifest and add this code in your activity class and check..i hope it will help for you.

@Override
public void onConfigurationChanged(Configuration newConfig)
    {
  super.onConfigurationChanged(newConfig);
  setContentView(R.layout.main);
}

this method will be called when orientation is changed nothing else if u don't want to change anything let it be blank

于 2011-05-09T07:09:31.380 回答