0

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

好吧,每当我旋转显示器时,这项工作似乎又完成了(两次!)。在我的 LogCat 中,我看到 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;
}

但是,在重新定位期间,Android 必须为我做这件事。关闭我创建的实例后,它会使用相同的捆绑包为新的屏幕方向实例化另一个实例。最终,onActivityCreated 在新实例上被调用,我的代码不再读取它刚才读取的同一个文件并重新进行数字运算。

任何见解将不胜感激...

4

0 回答 0