2

asynctask を使用して httpget リクエストを行う Android アプリがありますが、リクエストの処理中に電話がかかってきたり、インターネット接続が何らかの形で失われたりすると、アプリがクラッシュします。ブロードキャスト レシーバーを使用してネットワークの状態を確認するのが最適だと思います。誰かが正しいことを提案できますか?

4

1 に答える 1

0

問題がアプリのクラッシュであり、アプリをクラッシュさせたくない場合

次に、サーバー通信を内部で行いますtry catch。予期しない障害や着信の中断が発生した場合でも、アプリがクラッシュしないようにします。

結果は、次のいずれかになる可能性があります。

着信を受けながら、

  1. コミュニケーションが完了すると、タスクの後に期待する結果が表示されます。

  2. サーバーへの通信に失敗した場合、アプリは asynctask を呼び出す前の古い状態または画面のままになります。

このタスクの失敗を処理することについて心配している場合は、

次に、キャッチ結果を返してonPostExecute()、これらのタイプの失敗の後にやりたいことを行うことができます。

おそらく、ブロードキャストレシーバーを登録することは、バックグラウンド スレッドではお勧めできません。

いずれにせよ、そのような状況が発生した場合、AsyncTask をキャンセルする必要がないため、自動的にキャンセルされます。

もう 1 つの問題は、レシーバーを登録すると、アプリケーションが生きていて、Web サーバーと通信していなくても着信が発生するたびにレシーバーが起動されることです。

放送受信機を発射すると、バッテリーが消耗します。

それでもレシーバーを登録する必要がある場合は、次のリンクでコネクティビティ レシーバーに関するすべての情報とサンプル コードを確認できます。

接続変更レシーバーの検出

oncreate() でレシーバーを登録し、onDestroy() で登録を解除する方法は、 でレシーバーを登録する方法よりも軽量で洗練されていることに注意してください。

追加情報:

いつか asynctask をキャンセルする必要がある場合は、次のリンクが役立つ可能性があります

実行中の AsyncTask をキャンセルする理想的な方法

于 2012-11-19T06:58:52.220 に答える