cancel() не работает, и killBackgroundProcesses ни
Я создаю APK, но у меня есть проблема. Мой APK отправляет запрос GET, когда он заканчивается. У меня есть класс asynctask для отправки запроса GET (GPS). Проблема в том, что когда я снова запускаю приложение, мне нужно убить фоновые процессы предыдущего запуска. Я поместил android: разрешение = использование android:name="android.permission.RESTART_PACKAGES" и android:name="android.permission.KILL_BACKGROUND_PROCESSES" разрешение использования в файл manifest.xml и использовал следующий код:
if (URLUtil.isValidUrl(URL_Pet_GET) && URLUtil.isValidUrl(URL_Host)){
//Get_Backgnd.cancel(true); not working
context.getSystemService(Context.ACTIVITY_SERVICE);
manager.killBackgroundProcesses(String.valueOf(process.processName));
//not working
//ActivityManager activityManager = (ActivityManager) context.getSystemService("activity");
//activityManager.restartPackage(packageName);
//not working
pet_get_backgrnd Get_Backgnd = new pet_get_backgrnd();
Get_Backgnd.execute(); //Send GET request that I need stop on next execution of apk
}
private class pet_get_backgrnd extends AsyncTask<Context, Object, Object>{
/*@Override
protected void onPreExecute() {
cancel(true);
}*/ //not working
@Override
protected Object doInBackground(Context... params) {
//send Get requests
}
}
Как я могу отменить выполнение Get_Backgnd при следующем запуске APK? или то же самое Как я могу отменить выполнение Get_Backgnd предыдущего выполнения APK?
Спасибо
1 ответ
cancel()
Метод AsyncTask фактически не отменяет выполнение, а устанавливает флаг, который можно просмотреть с помощью isCancelled()
метод. Вам нужно будет вручную проверить этот флаг в doInBackground()
и напишите, как вы хотите, чтобы ваша задача справилась с отменой. Посмотрите этот ответ для примера этого и некоторых полезных ссылок на отмену AsyncTasks.
Чтобы убедиться, что ваша AsyncTask не сохраняется, вы можете сделать звонок для отмены в onPause()
или же onDestroy()
действия, которое порождает его, в зависимости от того, что вы считаете более подходящим, так что задание убивается, как только оно перестает быть актуальным. Важно, чтобы это было сделано в Деятельности, которая фактически создает задачу, вы не сможете отменить задачу при последующих запусках APK, потому что у вас больше нет ссылки на нее. Это в сочетании с ручной проверкой isCancelled()
должен помочь дать вам поведение, которое вы требуете.