Open sadr0b0t opened 2 years ago
По WorkManager
вход здесь: https://developer.android.com/topic/libraries/architecture/workmanager/basics
Судя по всему, это нормальный вариант моего доморощенного TaskController с возможностью отправлять таски в системный менеджер заданий (как TaskController + фоновый сервис).
Например, здесь предлагают обрывать задание регулярной проверкой флага https://developer.android.com/topic/libraries/architecture/workmanager/how-to/managing-work
You can call the [ListenableWorker.isStopped()](https://developer.android.com/reference/androidx/work/ListenableWorker#isStopped()) method to check if your worker has already been stopped. If you're performing long-running or repetitive operations in your Worker, you should check this property frequently and use it as a signal for stopping work as soon as possible.
а здесь еще что-то про тесты: https://developer.android.com/topic/libraries/architecture/workmanager/how-to/integration-testing
В целом, будет правильно избавиться от TaskController и перейти на него, в таком случае, может, не потребуется еще один сервис городить. Но как-то не хочется прямо настолько сейчас этот код лопатить. Поэтому, пожалуй, начну по старой схеме с сервиса.
Так просто с наскока механически не получается перенести в сервис (PlaylistImportService). С процедурой добавления рекомендованных еще может быть понятно, т.к. это одна задача (закрыли экран добавления рекомендованных, вернулись - он показывает тот же процесс в том месте, где он сейчас находится).
А если разрешить добавлять обычные плейлисты в фоне, то придется разрешить добавлять несколько разных плейлистов одновременно (задачи будут жить в сервисе одновременно, а добавляться они могут все равно один за одним). Т.е. получаем управление очередью добавления плейлистов - нужен какой-то список этих плейлистов и т.п., т.е. нужно перерабатывать интерфейс полностью, это большая история.
Процедура добавления рекомендованных плейлистов достаточно продолжительная. Может иметь смысл перенести ее в сервис, чтобы можно было безопасно закрывать окно приложения в процессе. Как делать сервисы обкатал в этом тикете https://github.com/sadr0b0t/yashlang/issues/8
Как вариант - посмотреть, что из себя представляет WorkManager