我在使用ICS片段时遇到了一些麻烦。我有一个片段(称之为AnalysisFragment),它执行大量的数字运算工作,读取文件然后对其执行大量计算。大部分工作都是在onActivityCreated中启动的,因为我需要在完成工作之前查阅应用程序的设置文件,这反过来又需要具有可通过活动访问的上下文,这在调用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,我的代码在不久前读取的同一个文件中读取并重新进行数字处理。
任何见解都会受到赞赏......