以下の手順を試してみたらうまく行くでしょう。
1.AsyncTaskの通常の内部クラスとして生成するのではなくStaticな内部クラスとして生成するか、まったく別なクラスにしましょう。
2.AsyncTaskにActivityをメンバーとして保持させてActivityを受け取ることの出来るコンストラクタとSetterを作成してをデータをセットできるようにしましょう。
3.AsyncTaskを作成する際に先ほど作成したコンストラクタの引数にActivityを渡します。
4.Activityの画面回転時に呼ばれるonRetainNonConfigurationInstance()をオーバライドして実行中だったAsyncTaskの実体をReturnするようにしましょう。
5.onCreate()でgetLastNonConfigurationInstance()がnullではない場合に、AsyncTaskクラスにcastしてsetterを呼び出しこれまでのAsyncTaskと再起動されたActivityを連結しましょう。
6.doInBackground()からActivityのデータメンバーを参照しないようにしましょう。
少し解説を、
・AsysncTaskのonProgressUpdate()とonPostExecute()は、onRetainNonConfigurationInstance()の始めからonCreate()の終わりまで呼ばれることはありません。
・AsyncTaskではなくIntentServiceを使う方法もあります。
作業が長くなる場合やユーザが大きいサイズのファイルをダウンロードするなどの処理をしても、使えるので便利です。
処理が終わった際にNotificationを出して作業が終わったと知らせたりするとよいでしょう。
以上です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。