2017-02-04 7 views
0

Это в моей основной деятельности:Как сохранить AsyncTask, когда пользователь закрывает приложение

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
    finish(); 
    moveTaskToBack(true); 
    System.exit(0); 
} 

Я хочу AsyncTask продолжать помещать данные в моем сервере в фоновом режиме после того, как пользователь закрывает приложение.

+0

необходимо познакомиться с сервисами –

+0

Duplicate - http://stackoverflow.com/questions/39507506/how-to-execute-background-task-when-android-app-is-closed-set-to-background и http://stackoverflow.com/questions/39507506/how-to-execute-background-task-when-android-app-is-closed-set-to-background –

+0

Устраивайтесь с услугами –

ответ

2

Я хочу, чтобы AsyncTask продолжал поместить данные на моем сервере в фоновом режиме после закрытия пользователем приложения.

Целью AsyncTask является НЕ для выполнения фоновых задач, которые выходят за рамки жизненного цикла Activity «s. Когда фоновый поток назначается из пула потоков, он ожидает вернуть его после завершения задачи. т.е. вы не можете использовать AsyncTask, для которого требуемое время является неопределенным.

Что вы ищетеServices в Android.

Почему бы использовать AsyncTask, если у нас есть услуги?

Ну, скажем, например, вы требуете, чтобы загрузить картинку/песню из Activity на щелчку Button или вам необходимо выполнить задание, которое займет некоторое время, чтобы закончить его выполнение. Выполнение этих задач из основного потока (aka UI thread) является плохим подходом и сделает ваше приложение вялым и в конечном итоге может привести к ANR. Таким образом, эти задачи должны обрабатываться асинхронно из отдельного потока, чтобы поддерживать маску приложения гладкой.

+0

Я до сих пор не слышал о сервисах. Определенно проверит это. – grant

+0

Это лучшая часть того, чтобы быть частью сообщества. Вы узнаете новые вещи и делитесь новыми вещами :) – OBX

+0

Зачем использовать AsyncTask, если у нас есть услуги? – grant

0

Вы должны проверить услуги или/и IntentServices

1

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

Лично я бы рекомендовал против использования услуг в пользу JobScheduler или если вам необходимо поддерживать устройства ниже API 21, Evernote-х JobManager (который также немного проще в использовании). Это поможет вам запланировать фоновые операции в соответствующее время, чтобы свести к минимуму использование батареи или когда устройство находится в режиме ожидания. При использовании ресурса устройства важно быть хорошим гражданином.

+0

Выполняет 'System.exit (0);' завершает службу? – grant

+0

@grant System.exit (0) остановит службу. Это существенно сбой процесса приложения. Однако служба может быть перезапущена в зависимости от типа созданной вами службы. Если услуга известна как Sticky Service (https://developer.android.com/reference/android/app/Service.html#START_STICKY), то ОС перезапустит вашу службу, что, конечно же, перезапустит процесс. – dhaag23

Смежные вопросы