在我的应用我有几个AsyncTasks做的http请求。 如果任务失败我显示DialogFragment给用户。
ErrorDialogFragment newFragment = ErrorDialogFragment.newInstance(R.string.dialog_message_error);
newFragment.show(getFragmentManager(), ConstantHandler.DIALOG_ERROR);
的问题是,用户有时退出活动或之前的AsyncTask应用程序完成时,造成在getFragmentManager一个零指示字例外。
我的问题是,如果有一种方法来避免这种情况,除了保持轨道上,如果每个片断和活动仍在运行?
我以前也有同样的问题。 一个相当不错的答案,我在博客上看到的地方(我忘了)如下:
给你的AsyncTasks当前上下文的参考。 当你的应用程序最小化/旋转,使用保存AsyncTasks onRetainNonConfigurationInstance()
和getLastNonConfigurationInstance()
然后重新启动您的应用程序时,在onCreate()
您可以检查是否存在的AsyncTask从传回getLastNonConfigurationInstance()
如果有,设置它的背景下,以你的活动的新的上下文。 现在,您的AsyncTask将能够访问新的语境和完成其任务。
要彻底,你可能还需要设置你的背景下,以null
在AsyncTasks您使用保存之前onRetainNonConfigurationInstance()
然后在你的AsyncTask,检查的背景下试图用它做一些事情之前空。 这将阻止应用程序崩溃,如果尝试的AsyncTask在后台使用上下文一段时间。