Java 屏幕重新定向期间重复使用Android片段

Java 屏幕重新定向期间重复使用Android片段,java,android,android-fragments,Java,Android,Android Fragments,我正在为我在ICS中使用碎片而挣扎。我有一个片段(称为AnalysisFragment),它做了大量的数字运算工作,读取一个文件,然后对其执行大量计算。这项工作大部分是在onActivityCreated中启动的,因为我需要在执行这项工作之前查阅应用程序的设置文件,而这又需要有上下文,上下文可以通过活动访问,在调用onActivityCreated之前,上下文不一定可用 嗯,每当我旋转显示器时,这项工作似乎又开始了(两次!)。在我的日志猫中,我看到onDestroyView和onDestroy发

我正在为我在ICS中使用碎片而挣扎。我有一个片段(称为AnalysisFragment),它做了大量的数字运算工作,读取一个文件,然后对其执行大量计算。这项工作大部分是在onActivityCreated中启动的,因为我需要在执行这项工作之前查阅应用程序的设置文件,而这又需要有上下文,上下文可以通过活动访问,在调用onActivityCreated之前,上下文不一定可用

嗯,每当我旋转显示器时,这项工作似乎又开始了(两次!)。在我的日志猫中,我看到onDestroyView和onDestroy发生(一次),然后是onCreate、onCreateView和onActivityCreated(两次),所有这些都与AnalysisFragment有关

显然,为不同的方向重新绘制屏幕的工作必须重新进行,但是有什么方法可以避免第二次(更不用说第三次)的数字处理工作

我可能应该补充一点,每当用户选择一个新文件进行分析时,我都会实例化AnalysisFragment的一个新副本,如下所示

public static AnalysisFragment newInstance
(
    String ndsFileName,
    ViewIndicator viewIndicator
)
{
    AnalysisFragment analysisFragment = new AnalysisFragment( );

    Bundle bundle = new Bundle( );
    bundle.putString( "nds_file_name", ndsFileName );
    bundle.putString( "view_indicator", viewIndicator.toString( ) );
    analysisFragment.setArguments( bundle );

    return analysisFragment;
}
然而,在重新定位的过程中,安卓肯定是在为我做这件事。关闭我创建的实例后,它将使用相同的包为新的屏幕方向实例化另一个实例。最终,在新实例上调用onActivityCreated,我的代码不再读取刚才读取的同一个文件,而是重新进行数字运算


如果您有任何见解,我们将不胜感激……

使用savedInstanceState可能是一个很好的开始,可以在方向更改之间保留数据。您说“onActivityCreated,因为我需要查看应用程序的设置”,但没有任何东西可以阻止您在早期片段的周期阶段获取应用程序设置。你所需要的只是上下文。您可以在构造函数中传递一个对象,也可以使用作为上下文子类的任何对象(如活动)