2

在我的应用程序中,我有几个 AsyncTasks 执行 http 请求。如果任务失败,我会向用户显示一个 DialogFragment。

ErrorDialogFragment newFragment = ErrorDialogFragment.newInstance(R.string.dialog_message_error);
newFragment.show(getFragmentManager(), ConstantHandler.DIALOG_ERROR);

问题是用户有时会在 AsyncTask 完成之前退出 Activity 或 Application,导致 getFragmentManager 上出现空指针异常。

我的问题是,除了跟踪每个片段和活动是否仍在运行之外,是否有办法避免这种情况?

4

1 回答 1

3

我以前也遇到过同样的问题。我在某处的博客上看到的一个相当好的答案(我已经忘记了)如下:

为您的 AsyncTasks 提供对当前上下文的引用。当您的应用程序被最小化/旋转时,使用onRetainNonConfigurationInstance()和保存您的 AsyncTasks getLastNonConfigurationInstance()。然后,当您的应用程序重新启动时onCreate(),您可以检查是否有从getLastNonConfigurationInstance(). 如果有,请将其上下文设置为您的活动的新上下文。现在您的 AsyncTask 将能够访问新的 Context 并完成其任务。

为了彻底,您可能还想null在 AsyncTasks 中设置上下文,然后再使用onRetainNonConfigurationInstance(). 然后在您的 AsyncTask 中,在尝试使用它做某事之前检查 Context 是否为空。如果 AsyncTask 在后台尝试使用上下文,这将阻止应用程序崩溃。

于 2012-07-23T08:34:39.607 回答