Java 调用onDestroy后在AsyncTask.onPostExecute中处理碎片事务的最佳方法

Java 调用onDestroy后在AsyncTask.onPostExecute中处理碎片事务的最佳方法,java,android,android-fragments,android-asynctask,android-activity,Java,Android,Android Fragments,Android Asynctask,Android Activity,在我的应用程序中,我总是需要在应用程序第一次打开时执行一些操作。当用户打开它时,应用程序显示一个带有进度条的对话框,同时在后台执行AsyncTask,然后(在onPostExecute())我需要提交一个片段 因此,在我的主要活动的onCreate()方法中,我有: public class InitialActivity extends SherlockFragmentActivity{ @Override protected void onCreate(Bundle savedIn

在我的应用程序中,我总是需要在应用程序第一次打开时执行一些操作。当用户打开它时,应用程序显示一个带有进度条的对话框,同时在后台执行
AsyncTask
,然后(在
onPostExecute()
)我需要提交一个
片段

因此,在我的主要
活动
onCreate()
方法中,我有:

public class InitialActivity extends SherlockFragmentActivity{

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_initial);
        if(savedInstanceState == null) //Executes just at the firstTime
        {
            //ApplicationStarter -> It manages all execution to start my app, executes asynctask, shows dialogs..
            ApplicationStarter starter = new ApplicationStarter(this) {

                @Override
                public void afterFinish() {
                    //It Executes at onPostExecute when doInBackground() finishes
                    ItensFragment itensfrag = new ItensFragment();
                    frag.setTargetFragment(itensfrag , 0);
                    android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager()
                            .beginTransaction();
                    ft.replace(R.id.simple_fragment, itensfrag);
                    ft.commitAllowingStateLoss();   

                }
            };
            starter.start();
        }
    }
}
所以,一切都会正常,但是如果用户旋转设备或调用
ondstroy()
方法,应用程序就会崩溃。启动以下异常:

java.lang.IllegalStateException: Activity has been destroyed  
ft.commitAllowingStateLoss()

我四处搜索,发现在异步回调方法中执行
片段
转换并不是一个好的实践,就像我正在尝试的那样。 还有,也许我可以适应我的情况。但在此之前,我想知道是否有人对我的工作有更好的方法或建议。

提前谢谢。

按照@Raghunandan的建议,我照做了,一切都很顺利。最大的区别是,现在我在片段的
onCreate
上调用我的应用程序启动程序,该片段设置为
setRetainInstance(true)
。InitialActivity有一个
ItensFragment
实例。我的
InitialActivity
onCreate()
中的代码是:

public class InitialActivity extends SherlockFragmentActivity {
private ItensFragment itensfrag;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_inicial);
    FragmentManager fm = getSupportFragmentManager();
    itensfrag= (ItensFragment) fm.findFragmentByTag("itensfrag");
    if (savedInstanceState == null) {
        if (itensfrag== null) {
            itensfrag= new ItensFragment();
          fm.beginTransaction().replace(R.id.simple_fragment, itensfrag, "itensfrag").commit();
        }
    }
}
}       

当方向改变时发生。您的活动被销毁并重新创建。Asynctask顾名思义就是Asynchronous如果有帮助的话,你可以查看这个博客。