Android - как обрабатывать входящий телефонный звонок во время работы с сетью - PullRequest
1 голос
/ 08 февраля 2012

Мое приложение имеет функцию, которая отправляет некоторые данные в веб-службу, когда в меню выбран параметр.Для этого у меня есть 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
    }
}

Я пытаюсь объяснить ситуацию, когда пользователь начинает отправлять данные в веб-службу, но затем получает входящий телефонный звонок во время передачи.,Когда происходит событие входящего вызова, вызывается метод onPause действия, но поскольку моя передача происходит в AsyncTask, поток AsyncTask будет продолжаться даже после завершения onPause.

Так что мне интересно, как лучше всего справиться с этой ситуацией?Позволить ли ему AsyncTask продолжать работать?Слушаю ли я событие входящего вызова и пытаюсь отменить AsyncTask?

Как влияет на это радио, используемое для передачи (WiFi или сотовая сеть)?Я считаю, что некоторые операторы (например, Verizon) не разрешают передачу данных по своей сотовой сети во время телефонного разговора.Влияет ли WiFi на телефонные звонки?

Будет ли миграция в поток внутри компонента Service иметь значение?

1 Ответ

2 голосов
/ 08 февраля 2012

Как обычно, это зависит.Насколько важны данные?Насколько велик?Можете ли вы просто повторить попытку, если передача прервана?Телефонный звонок - это не особый случай.Ваша активность может быть в любой момент заблокирована (пользователь нажимает кнопку «Домой» и т. Д.), И поскольку это мобильное устройство, вы можете потерять соединение в любое время (поезд идет в туннель и т. Д.)

Выможно просто запустить, и если размер данных невелик, скорее всего, он будет успешно загружен.Если он больше, сервис даст вам больше шансов завершить загрузку, но он также может быть пересчитан, так что вы должны справиться с этим правильно.Вы также можете прослушивать изменения подключения (использовать широковещательный приемник) и автоматически повторять загрузку, когда сеть доступна.

...