私のアプリケーションには、メニューでオプションが選択されたときにWebサービスにデータを送信する機能があります。これを行うために、アイテムが選択されるとAsyncTaskを実行するアクティビティがあります。
これは、デモンストレーションの目的で複雑さを軽減するために簡略化されたサンプルコードです。sendDataToWebService()メソッドは、選択イベントで呼び出されます。
private void sendDataToWebService(MyData myData)
{
MyAsyncTask task = new MyAsyncTask();
task.execute(myData);
}
private class MyAsyncTask extends AsyncTask<MyData, Integer, String>
{
@Override
protected String doInBackground(MyData... myDataObjects)
{
// code here calls the data access layer, passing my data to it.
// The data access layer basically does this (simplyfied for this example):
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPostRequest = new HttpPost(uri);
response = httpclient.execute(httpPostRequest);
//... clean up and return response back to doInBackground()...
return someStringText;
}
@Override
protected void onPostExecute(String value)
{
// Do something related to the value parameter
}
}
ユーザーがWebサービスへのデータの送信を開始した後、送信中に着信電話を受信する状況を説明しようとしています。着信イベントが発生すると、アクティビティのonPauseメソッドが呼び出されますが、送信がAsyncTaskで行われているため、onPauseが完了した後もAsyncTaskスレッドは続行されます。
だから私はこの状況に対処するための最良の方法は何だろうかと思っていますか?AsyncTaskを実行し続けますか?着信イベントをリッスンして、AsyncTaskをキャンセルしようとしますか?
送信に使用されている無線(WiFiまたはセルネットワーク)はこれにどのように影響しますか?一部の通信事業者(Verizonなど)は、電話での会話中に携帯電話ネットワークを介したデータ送信を許可していないと思います。WiFiはどういうわけか電話の影響を受けますか?
これをサービスコンポーネント内のスレッドに移行すると、違いが生じますか?