我的应用程序有一个功能,当菜单中的一个选项被选中时,它会向web服务发送一些数据。为此,我有一个活动,它在选择项目后执行AsyncTask。
以下是一些简化的示例代码,以降低演示目的的复杂性。在selection事件中调用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是不是受到了电话的影响?
将其迁移到服务组件中的线程是否会有所不同?
发布于 2012-02-08 11:01:13
像往常一样,这要视情况而定。数据有多重要?多大?如果传输中断,您可以重试吗?电话并不是特例。您的活动可能随时处于背景状态(用户按下主页按钮等),而且由于这是一个移动设备,您随时可能失去连接(火车进入隧道等)
您可以让它运行,如果数据大小较小,则可能会成功上载。如果它更大,服务会给你更好的完成上传的机会,但它也可能会被重复,所以你应该正确地处理它。您还可以侦听连接更改(使用广播侦听程序),并在网络可用时自动重试上载。
https://stackoverflow.com/questions/9185766
复制相似问题