2

私のアプリでは、http リクエストを実行する AsyncTasks がいくつかあります。タスクが失敗した場合、DialogFragment をユーザーに表示します。

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

問題は、AsyncTask が完了する前にユーザーがアクティビティまたはアプリケーションを終了することがあり、getFragmentManager で null ポインター例外が発生することです。

私の質問は、各フラグメントとアクティビティがまだ実行されているかどうかを追跡する以外に、これを回避する方法があるかどうかです。

4

1 に答える 1

3

私は以前に同じ問題を抱えていました。どこかのブログで見たかなり良い答えは次のとおりです(忘れてしまいました)。

AsyncTasks に現在のコンテキストへの参照を与えます。onRetainNonConfigurationInstance()アプリが最小化/回転されている場合は、 と を使用して AsyncTasks を保存しますgetLastNonConfigurationInstance()。次に、アプリを再起動すると、onCreate()から返された AsyncTask があるかどうかを確認できますgetLastNonConfigurationInstance()。ある場合は、そのコンテキストをアクティビティの新しいコンテキストに設定します。これで、AsyncTask が新しい Context にアクセスして、そのタスクを完了することができるようになります。

null徹底的にするために、 を使用して保存する前に、おそらく AsyncTasks でコンテキストを に設定することもできますonRetainNonConfigurationInstance()。次に、AsyncTask で、Context を使用して何かを実行する前に、Context が null かどうかを確認します。これにより、AsyncTask がバックグラウンドでコンテキストを使用しようとした場合に、アプリのクラッシュが停止します。

于 2012-07-23T08:34:39.607 に答える