2

私は多くのフォーラムディスカッションを見回してきましたが、実際のアクティビティを強制的に再開する実行時の変更を処理する方法に適切に答えているものはありません。

たとえば、私の場合、アクティビティはAsyncTaskを使用して、サーバーからデータをフェッチしているときにProgressBarを表示します。ただし、ユーザーが画面を回転させるだけで、アクティビティが再開され、サーバーへの要求が繰り返されます。

AsyncTaskがまだdoInBackground()にあり、サーバーの応答を待っている間に画面の回転が行われると、android.view.WindowLeakedエラーが発生します。

画面が回転したり、別の中断が発生したりしたときはいつでも、私のアクティビティは停止したところからその仕事を続けたいのですが、これは難しいでしょうか?

onSaveInsanceState()をお勧めしますか?部分的に受信したJSONをバンドルに保存するにはどうすればよいですか?または、onRetainNonConfigurationInstance()を使用する必要があります...

私を助けてくれる良い魂のために、ブラジルの飲み物「カイピリーニャ」のボトルを送ります...

4

1 に答える 1

0

別のアーキテクチャを使用する必要があります。

バックグラウンド操作を AsyncTask から Service に移動します。サービスは、アクティビティとは無関係にバックグラウンドで実行され、デバイスの向きを変更しても再起動されません。

バックグラウンド サービスは、ブロードキャストを介してフォアグラウンド アクティビティと通信できます。サービス内で、sendBroadcast() を使用して進行状況情報を含むブロードキャストを送信できます。BroadcastReceiver を使用して、Activity でブロードキャストを受信できます。

編集:状況に応じて適切な可能性のある劇的なアプローチについては、http: //developer.android.com/guide/topics/resources/runtime-changes.htmlを参照してください。特に、横向きと縦向きで異なるリソースを使用しない場合は、2 番目の方法 (構成の変更を自分で処理する) がうまく機能する可能性があります。

EDIT2: ここにいくつかの追加情報: ローテーション Android でのアクティビティの再起動

于 2012-06-17T01:15:33.390 に答える