强制Android在重定向方向上不重绘活动

时间:2011-05-09 06:57:21

标签: android android-lifecycle

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

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

有没有简单的方法可以指向Android,当方向发生变化时,根本不需要重新绘制此活动,以便自动保存所有数据并重新使用它?

我想知道是否有类似的事情。

8 个答案:

答案 0 :(得分:9)

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

修改android:configChanges属性的目的是防止在真正需要时重新创建活动。例如,“相机”应用程序使用此属性,因为在发生方向更改时,不得重新创建相机预览屏幕。用户希望相机预览在旋转设备时没有任何延迟,并且相机初始化不是一个非常快速的过程。因此,Camera应用程序可以手动处理方向更改。

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

所以总结一下这个答案,android:configChanges可以让你提高应用程序的性能,或者让它在某些极少数情况下“原生”行为,但它不会减少你拥有的代码量写。

答案 1 :(得分:6)

  

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

然后将该逻辑移出活动并进入服务。

答案 2 :(得分:4)

  

是的,您可以添加属性   android:configChanges =“orientation”to   中的活动宣言   AndroidManifest.xml文件。

恕我直言,最好宣布 机器人:configChanges = “取向|键盘| keyboardHidden”

关于博客文章,您在其他答案中提供了链接。我猜here就是答案:

  

如果您的申请不需要   在特定的期间更新资源   配置改变,你有一个   需要的性能限制   你要避免重启Activity,   然后你可以声明你的   Activity处理配置   改变自己,这阻止了   系统重启您的活动。

我和Android开发人员谈过这个问题。他的意思是跟随。如果横向和纵向方向没有不同的布局,则可以轻松使用configChanges。

答案 3 :(得分:1)

刚才回答了这个问题:Android - screen orientation reloads activity

在您的情况下,您希望完全阻止Android杀死您的活动。您需要更新清单以捕获方向更改,然后实现方向更改回调,以便在发生方向更改时实际执行您需要执行的任何操作(可能无效)。

答案 4 :(得分:1)

清单中活动标签中的

android:screenOrientation="portrait"将锁定您的方向。

检查this link是否有更多信息。

答案 5 :(得分:1)

如果您在异步任务中进行大量网络连接,可能应该使用onRetainNonConfigurationInstance() 然后使用this tutorialthis

onCreate()方法获取数据

答案 6 :(得分:1)

将android:configChanges =“orientation”添加到您在清单中的活动中,并将此代码添加到您的活动类中并检查..我希望它对您有所帮助。

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

当方向改变时,如果你不想改变任何东西,就会调用这个方法让它变成空白

答案 7 :(得分:1)

我通过将此添加到我的清单文件

中的活动解决了我的问题

机器人:configChanges = “keyboardHidden |取向|屏幕尺寸”