我的教育应用程序有一个标签主机,有6到7个标签,支持横向和纵向模式。在与标签相关联的每个活动中,我在列表视图中显示一些学生记录,其中包含一些用于选择的复选框和一些评级栏,按钮等。我通过Web服务调用从远程服务器获取这些学生记录。出于某些原因,我的应用程序将在执行某些操作/搜索后显示一个初始相对布局和一些按钮它将在列表视图中显示结果,在列表视图中单击列表项或按钮时我将显示其他布局。这适用于标签主机中的所有活动。
如果用户更改方向,我必须恢复相同的状态或相同的屏幕意味着如果用户以前看到记录列表我必须显示记录列表,如果初始我只需要显示初始。我不想在方向更改或覆盖public Object onRetainNonConfigurationInstance ()
时强制停止android销毁活动。正如一些博客和Android doc中所建议的那样,这些可能会在以后的操作中引起问题。我所做的只是保存所有必需的信息,例如哪个屏幕1或2或3,文本视图标签和onSaveInstanceState
Bundle中的所有原始数据类型,并在onRestoreInstanceState
中恢复它们。此外,我正在将自定义搜索结果Object数组写入文件,并在onSaveInstanceState和onRestoreInstanceStates之间重新删除它。由于我的搜索结果有100个对象,而且我存储了大量原始数据类型列表,这会在用户快速旋转设备时迅速增加堆大小。
处理它的最佳方法是什么
1)持久化onSaveInstanceState和onRestoreInstanceStates,这会使我的屏幕空白一段时间并增加堆大小,当用户多次旋转时不一定执行保存和恢复
2)将所有需要的数据保存在静态的位置,因为它不是活动本地的,它不会破坏
3)通过扩展Application类来保留所有需要的数据?
答案 0 :(得分:2)
您还可以使用可以通过方向更改保留的片段。
答案 1 :(得分:1)
如果方向配置发生变化(您可以添加监听器),我建议您从清单和程序中修改方向,您可以调整视图,因为它看起来已经改变了方向。通过这种方式,您可以保存数据以及不必要的内存存储。动态对齐和重新定位视图不会模糊,不用担心。
// Add inside manifest.
android:configChanges="orientation|keyboardHidden"
// Reposition your views
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
align_landscape();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
align_portrait();
}
}