Comments 9
Я решал подобную проблему с помощью LocalBroadcastManager. Вот например тут вкратце описано.
Все сложнее, ежели вам нужно гонять туда-сюда много разных данных своего типа. Кстати, вижу у Message есть поле obj, по идее туда можно что-то свое положить, в документации написано «Objects are reference counted across processes.».
Есть еще AIDL. С его помощью можно передавать любые данные и дергать свои методы + многозадачность.
Все сложнее, ежели вам нужно гонять туда-сюда много разных данных своего типа. Кстати, вижу у Message есть поле obj, по идее туда можно что-то свое положить, в документации написано «Objects are reference counted across processes.».
Есть еще AIDL. С его помощью можно передавать любые данные и дергать свои методы + многозадачность.
0
Пришлось так, что нужно передавать результат — объект, но вот не могу его модифицировать поддерживать Parcelable. Решение: паттерн Mediator + static reference на объект. Последующий вызов методы Mediator вернел ссылка на объект, а static reference обнулит. Тут только одно, нужно в коде гарантированно вызывать этот метод после запрос сервиса, иначе memory leak.
Ну это так, локальное решение так сказать.
Ну это так, локальное решение так сказать.
0
Можно проще. Запускаем Service, все что нужно передаем в него через Intent'ы, которые будут обрабатываться в onStartCommand. В обратном направлении, из Service в Activity посылаем тоже Intent'ы, но через BroadcastReceiver. Надежно, проще, чем с bind, и что важно — без магии!) Мне нравится магия, я люблю магию, но я заметил, что она как собственный пук — нравится только Вам, а окружающие, те кому придется работать с Вашим кодом, ее ненавидят)
+2
Если сервис — всегда ваш, и работает в том же процессе, что и Activity (подписан тем же ключём) — не нужно вообще ничего городить. Вы можете получить обычную локальную ссылку на объект сервиса и вызвать любые методы этого объекта.
0
Синглтон? Если нет, то пример в студию! Будет полезно!
0
в сервисе
в ServiceConnection внутри Activity
public class MyServiceBinder extends Binder {
MyService getService() {
return MyService.this;
}
}
private IBinder binder = new MyServiceBinder();
public IBinder onBind(Intent arg0) {
return binder;
}
в ServiceConnection внутри Activity
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
service = ((MyService.MyServiceBinder) arg1).getService();
}
0
Sign up to leave a comment.
Коммуникация между Activity и Service