Хорошо, мне удалось сделать что-то близкое к тому, что я хочу.
Я использую IntentService, который поставит мою задачу в очередь.каждое новое задание AsyncTask
.AsyncTask начинается с отправки уведомления с pendingIntent для cancelActivity.
При нажатии на уведомление пользователь получает всплывающее окно с предупреждением об остановке задачи.Если он нажимает «да», чем я stopService()
в моем IntentService.
В IntentService я добавил:
@Override
public void onDestroy() {
currentTask.cancel(true);
if (mNotificationHelper != null)
mNotificationHelper.completed();
super.onDestroy();
stopSelf();
}
в AsyncTask, который я добавил:
@Override
protected void onCancelled() {
isCanclled = true;
httpClient.getConnectionManager().shutdown();
mNotificationHelper.completed();
if (mAsyncTaskListener != null)
mAsyncTaskListener.AsyncTaskCanceled();
}
так что будет сброшено все соединение, находящееся в данный момент в движении.В реальном коде, который выполняет эту работу, мне нужно поймать исключение для завершения соединения и обработать его
, так что в конце я фактически не останавливаю AsyncTask / Service, а скорее выставляю httpClient
, поэтому я будубыть в состоянии отбросить соединение в асинхронном режиме, почему.
Я думаю, что это немного некрасиво, но у меня нет другого пути
спасибо всем