Асинхронная задача и загрузка процесса загрузки в панели уведомлений не работает, когда приложение уничтожено
Я загружаю некоторые изображения с помощью асинхронной задачи, и все работает нормально. Затем мне пришла в голову идея показать прогресс загрузки в области уведомлений, поэтому я воспользовался этим учебным пособием и получил 100-процентный успех. Посмотрите эту ссылку, я думаю, что это хорошая ссылка для начинающих.
Но затем я проверил кое-что и потерпел неудачу в этом:
Это то, что я заметил
1> Асинхронная задача перестает работать, когда я закрываю приложение с помощью диспетчера задач или когда я делаю это прагматично.
@Override
protected void onDestroy() {
super.onDestroy();
System.exit(0);
}
смысл использования этого кода - проверить, работает ли моя асинхронная задняя часть в фоновом режиме или нет.
2> Я хочу, чтобы в случае уничтожения моего приложения процесс загрузки продолжался и продолжал обновлять процесс загрузки в панели уведомлений, и да, я хочу показать в уведомлении кнопку, которая будет использоваться для остановки загрузки и открытия действия,
Пожалуйста, скажите мне, как я могу достичь этих двух пунктов. Я заметил процесс загрузки приложения Play Store, и оно работает точно так же, как я хотел.
Пожалуйста, помогите мне в этих двух пунктах.
2 ответа
Вы должны использовать сервис для этого. Сервис имеет жизненный цикл, отличный от активности с пользовательским интерфейсом, что гарантирует его работу, даже если пользовательский интерфейс был разрушен. На самом деле это и есть службы, длительные операции, которые напрямую не связаны с пользовательским интерфейсом.
Сервисы могут, конечно, публиковать уведомления в баре и получать от них информацию.
С указанным кодом вы не проверяете, может ли AsyncTask работать в фоновом режиме. Вы пытаетесь запустить AsyncTask без вашего приложения. Гектометр Это не может работать, если ваш AsyncTask не является частью другой программы.
С помощью этой линии
System.exit(0);
ваш процесс уничтожен, и все потоки его. Это не то же самое, что просто закрытие пользовательского интерфейса. Вы должны вместо этого использовать
yourActivity.finish()
Тогда все должно работать нормально.
Обновить
Если вам нужно, чтобы загрузка продолжала загружаться, даже если приложение было уничтожено, например, принудительным закрытием, вам понадобится следующее:
Реализуйте липкий сервис, который регистрируется для Intent, например, "example.com.START_DOWNLOAD", добавьте URI в качестве дополнительного в этот Intent. Служба может быть запущена этим намерением или при загрузке системы - все, что лучше подходит для ваших нужд.
Ваше приложение отправляет это намерение вместо создания AsyncTask самостоятельно.
Ваш сервис и ваша деятельность должны быть отдельными пакетами; Если приложение закрыто, это не повлияет на загрузку.
Помните, что служба может аварийно завершить работу или быть вынуждена закрыться. Причиной этого может быть даже липкий сервис, но он будет перезапущен напрямую (до двух перезапусков, после чего он считается поврежденным). Поэтому, если загрузка продолжается, вы должны реализовать функцию "возобновить загрузку". Если загрузка не так велика по размеру, может быть допустимо просто перезапустить загрузку (и).