调用onDestroy后,在AsyncTask.onPostExecute中处理FragmentTransaction的最佳方法

时间:2014-01-11 15:43:19

标签: java android android-fragments android-asynctask android-activity

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

因此,在我的主Activity的{​​{1}}方法中,我有:

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(); } } } 方法后应用程序崩溃。启动以下异常:

onDestroy()

java.lang.IllegalStateException: Activity has been destroyed

我搜索了一下,我发现on this post在我试图做的异步回调方法中执行ft.commitAllowingStateLoss();转换不是一个好习惯。 And i saw this answer,也许我可以适应我的情况。但在此之前,我想知道是否有人对我正在尝试做的事情有更好的方法或建议 提前谢谢。

1 个答案:

答案 0 :(得分:0)

@Raghunandan如何建议,我跟着this post,一切正常。最大的区别是,现在我在我的Fragment onCreate上调用我的ApplicationStarter,它被设置为setRetainInstance(true)。 InitialActivity的实例为ItensFragment。我InitialActivity的{​​{1}}中的代码是:

onCreate()