我的应用程序有一个功能,当在菜单中选择一个选项时,它会向 Web 服务发送一些数据。为此,我有一个 Activity,它在选择项目后执行 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会以某种方式受到电话的影响吗?
将其迁移到服务组件中的线程会有所不同吗?