Android-如何在网络数据操作期间处理来电

Android-如何在网络数据操作期间处理来电,android,android-asynctask,lifecycle,android-lifecycle,Android,Android Asynctask,Lifecycle,Android Lifecycle,我的应用程序有一个特性,当在菜单中选择一个选项时,它会将一些数据发送到web服务。要做到这一点,我有一个活动,它在选择项目后执行一个异步任务 下面是一些简化的示例代码,以降低复杂性,便于演示。在选择事件上调用SendDataTowerService()方法: private void sendDataToWebService(MyData myData) { MyAsyncTask task = new MyAsyncTask(); task.execute(myData); }

我的应用程序有一个特性,当在菜单中选择一个选项时,它会将一些数据发送到web服务。要做到这一点,我有一个活动,它在选择项目后执行一个异步任务

下面是一些简化的示例代码,以降低复杂性,便于演示。在选择事件上调用SendDataTowerService()方法:

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
    }
}
private void SendDataTowerService(MyData MyData)
{
MyAsyncTask=新建MyAsyncTask();
task.execute(myData);
}
私有类MyAsyncTask扩展了AsyncTask
{
@凌驾
受保护的字符串doInBackground(MyData…myDataObjects)
{
//这里的代码调用数据访问层,将我的数据传递给它。
//数据访问层基本上做到了这一点(本例对此进行了简化):
HttpClient HttpClient=新的DefaultHttpClient();
HttpPostHttpPostRequest=新的HttpPost(uri);
response=httpclient.execute(httpPostRequest);
//…清理并将响应返回到doInBackground()。。。
返回someStringText;
}
@凌驾
受保护的void onPostExecute(字符串值)
{
//执行与value参数相关的操作
}
}
我试图解释这样一种情况:用户开始向web服务发送数据,但随后在传输过程中收到一个来电。当传入呼叫事件发生时,将调用活动的onPause方法,但由于我的传输发生在AsyncTask中,因此即使onPause完成后,AsyncTask线程仍将继续

所以我想知道处理这种情况的最好方法是什么?我是否让AsyncTask继续运行?我是否侦听传入呼叫事件并尝试取消异步任务

用于传输的无线电(WiFi或蜂窝网络)如何影响这一点?我相信一些运营商(如Verizon)不允许在电话通话期间通过其手机网络进行数据传输。WiFi是否受到电话的影响


将其迁移到服务组件内的线程是否会有所不同?

与往常一样,视情况而定。数据有多重要?多大?如果传输中断,你能再试一次吗?电话不是特例。您的活动可能随时处于后台(用户按下home按钮等),由于这是一个移动设备,您随时都可能失去连接(火车进入隧道等)


您可以让它运行,如果数据大小很小,它很可能会成功上传。如果它更大,一个服务会给你更好的机会完成上传,但它也可能被重述,所以你应该妥善处理。您还可以侦听连接更改(使用广播侦听器),并在网络可用时自动重试上载

谢谢你的回复。数据对于应用程序至关重要。它不是很大(4到20 KB),如果被中断,可以很容易地重新传输。我将数据本地保存在onPause中,然后在成功提交到web服务后将其清除。如果有电话打进来,我需要担心WiFi丢失吗?在这种情况下,
AsyncTask
可能可以正常工作。如果由于某种原因上载未完成,您可以重试
onResume()
。抱歉,来电对WiFi连接没有影响。