让一项活动在轮换中被摧毁有什么好处?

net*_*ein 5 android rotation

我使用了两种方法:

  1. 让活动在轮换时被销毁
  2. 不要让活动在轮换时被破坏

我的方法几乎每次都是捕获旋转事件,如果需要调用setContentView并再次添加一些组件.如果没有,只需让它旋转,布局设计适应.

到目前为止,我只看到了在具有非常动态的非常复杂结构的屏幕上销毁它的优点,并且每当我旋转而不是破坏时,在重新构建屏幕时显示出一些闪烁.

必须通过onSaveInstance,onRestoreInstace传递状态的开销有时非常容易出错,并且不知何故耗时.

我错过了什么吗?

更新:

我的代码中没有"Orientation.XPTO == ...".这是两种方法中的每一种的逻辑(代码被重用):

在摧毁时

onCreate -> DrawUI() setContentView and add views -> fill() add content
Run Code Online (Sandbox Code Playgroud)

不销毁时:

onCreate -> DrawUI() setContentView and add views -> fill() add content
onRotation -> DrawUI() setContentView and add views -> fill() add content
Run Code Online (Sandbox Code Playgroud)

在轮换后调用setContentView时,它将为设备方向选择正确的布局(通过Google的Reto Meier检查此答案/sf/answers/31984291/)

并且DrawUI和fill必须具有纵向和横向布局的逻辑,因为可以在两个方向中的每一个上创建活动以开始.

Com*_*are 10

我错过了什么吗?

是.您假设您的替代方案不太容易出错.

通过不进行销毁和重新创建循环,您必须确保为每个可能的配置更改处理更改每个资源.

不要让活动在轮换时被破坏

除非您使用android:screenOrientation强制活动进入单一方向(例如landscape),否则您不仅可以处理与旋转相关的配置更改.您需要处理所有配置更改.否则,只要用户将设备放入扩展坞,将其从扩展坞中移除,更改语言设置,附加或分离键盘,更改全局字体缩放等,您的应用就会中断.

反过来,这意味着在每次配置更改时,您需要:

  • 更新您的UI以获取可能的新字符串资源
  • 调整或重新加载您的布局(以及"调整",包括更改任何drawable,动画,菜单等)
  • 与资源相关的任何其他内容(例如,您的数据列表PreferenceFragment)

问题是你会忘记一些事情.例如,您将错过更改与操作栏项关联的字符串,因此现在大部分UI都是西班牙语,操作栏项目是英语.你将要忘记的事情将不那么明显(你多久经常测试一下你的西班牙语翻译?).