我一直在努力解决这个问题
虽然我已经在Orientation Change上阅读了很多内容,但是Android会杀死一个活动并将其作为一个新活动启动,而处理这个活动的唯一方法是将所有内容保存在onSaveInstanceState()
内并尝试在{{1}内恢复它1}}。
但是我的活动在不同时间做了很多不同类型的网络活动,如果在执行网络活动时改变方向,我将不得不处理很多不同的复杂场景。
有没有简单的方法可以指向Android,当方向发生变化时,根本不需要重新绘制此活动,以便自动保存所有数据并重新使用它?
我想知道是否有类似的事情。
答案 0 :(得分:9)
是的,您可以将属性android:configChanges="orientation"
添加到AndroidManifest.xml
文件中的活动声明。
修改强>:
android:configChanges
属性的目的是防止在真正需要时重新创建活动。例如,“相机”应用程序使用此属性,因为在发生方向更改时,不得重新创建相机预览屏幕。用户希望相机预览在旋转设备时没有任何延迟,并且相机初始化不是一个非常快速的过程。因此,Camera应用程序可以手动处理方向更改。
对于大多数应用程序,在方向更改期间是否重新创建活动并不重要。但有时,由于活动创建缓慢,活动执行的异步任务或其他原因,在此过程中持久保存活动会更方便。在这种情况下,可以稍微调整一个应用程序并使用android:configChanges="orientation"
属性。但是,当你使用这个调整时,真正重要的是你必须实现正确保存和恢复状态的方法!
所以总结一下这个答案,android:configChanges
可以让你提高应用程序的性能,或者让它在某些极少数情况下“原生”行为,但它不会减少你拥有的代码量写。
答案 1 :(得分:6)
但是我的活动在不同时间做了很多不同类型的网络活动,如果在执行网络活动时改变方向,我将不得不处理很多不同的复杂场景。
然后将该逻辑移出活动并进入服务。
答案 2 :(得分:4)
恕我直言,最好宣布 机器人:configChanges = “取向|键盘| keyboardHidden”是的,您可以添加属性 android:configChanges =“orientation”to 中的活动宣言 AndroidManifest.xml文件。
关于博客文章,您在其他答案中提供了链接。我猜here就是答案:
如果您的申请不需要 在特定的期间更新资源 配置改变,你有一个 需要的性能限制 你要避免重启Activity, 然后你可以声明你的 Activity处理配置 改变自己,这阻止了 系统重启您的活动。
我和Android开发人员谈过这个问题。他的意思是跟随。如果横向和纵向方向没有不同的布局,则可以轻松使用configChanges。
答案 3 :(得分:1)
刚才回答了这个问题:Android - screen orientation reloads activity
在您的情况下,您希望完全阻止Android杀死您的活动。您需要更新清单以捕获方向更改,然后实现方向更改回调,以便在发生方向更改时实际执行您需要执行的任何操作(可能无效)。
答案 4 :(得分:1)
android:screenOrientation="portrait"
将锁定您的方向。
检查this link是否有更多信息。
答案 5 :(得分:1)
如果您在异步任务中进行大量网络连接,可能应该使用onRetainNonConfigurationInstance()
然后使用this tutorial或this
onCreate()
方法获取数据
答案 6 :(得分:1)
将android:configChanges =“orientation”添加到您在清单中的活动中,并将此代码添加到您的活动类中并检查..我希望它对您有所帮助。
@Override
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
}
当方向改变时,如果你不想改变任何东西,就会调用这个方法让它变成空白
答案 7 :(得分:1)
我通过将此添加到我的清单文件
中的活动解决了我的问题机器人:configChanges = “keyboardHidden |取向|屏幕尺寸”