Страницы

Поиск по вопросам

суббота, 22 июня 2019 г.

Как обновить service не перезапуская его?

Возможно ли такое, чтобы запускать сервис при запуске приложения, а затем после каких-либо операций на UI обновлять сервис без его перезапуска (т.е. сервис работает с начальными данными, затем пользователь что-то делает, данные передаются в сервис и он начинает работать уже с новыми данными, не делая при этом stopService(), startService) ?


Ответ

Да, можно.
При первом запуске сервиса вызывается его метод onCreate При каждом последующем вызове Context#startServise(Context ctx, Intent intent), при условии, что сервис уже запущен, вызовется его метод onStartCommand
Таким образом по умолчанию вы получаете нужное вам поведение и не сервис не перезапускается каждый раз при вызове startServise, а вызываете метод ранее созданного экземпляра класса.
При этом вы можете через содержимое интента передавать к-л данные, обновляя содержимое полей класса сервиса.

Также есть ещё механизм биндинга сервиса к активити, позволяющего в активити получить ссылку на экземпляр запущенного сервиса и напрямую вызывать методы его экземпляра примерно так: instanceOfServiceClass.someMethodInServiceClass(someArgument);. Загуглить можно по Android service Binder. Вот статья на русском: Service. Биндинг. ServiceConnection

Комментариев нет:

Отправить комментарий