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() должен помочь дать вам поведение, которое вы требуете.

Другие вопросы по тегам