Android; Использование Сервиса для подписки / отмены подписки на объект Observable, хорошая идея? - PullRequest
0 голосов
/ 30 декабря 2010

У меня есть требование, согласно которому, когда пользователь нажимает кнопку, необходимо наблюдать за объектом. Когда пользователь снова нажимает эту кнопку, наблюдение прекращается.

Моя первоначальная мысль - привязать кнопку к методу в упражнении, используя onClick="myMethod" в файле макета.

Когда этот метод вызывается, он вызывает startService(), который начинает наблюдение за объектом. Под этим я подразумеваю, что он регистрирует службу в качестве наблюдателя.

При повторном нажатии кнопки вызывается метод stopService(), который отменяет регистрацию службы в качестве наблюдателя.

Мои мысли об использовании сервиса - это наблюдение; и последующее действие снимается с потока пользовательского интерфейса. Это разумный подход или в Android SDK есть что-то, что могло бы сделать это проще?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2010

Я согласен с Мерфи, но я хочу сказать вам кое-что: 1. что ты делаешь, когда деятельность разрушена? остановился? 2. если объект, который вы наблюдаете, генерирует события, которые вы должны наблюдать, вы должны думать о том, что происходит с ними во всех ситуациях, если объект-наблюдатель умирает от действия, я думаю, что вам лучше с асинхронной задачей или локальным потоком в любом случае вам также нужно будет обнаружить, что действие было уничтожено в вашем сервисе, чтобы GC обнаружил объект или также убил сервис в Activity onDestroy.

0 голосов
/ 30 декабря 2010

Мои мысли об использовании сервиса - это наблюдение; и последующее действие снимается с потока пользовательского интерфейса.

Только если вы разветвляете свой собственный поток, и только если «наблюдение» поддерживает альтернативные потоки. Службы находятся в «фоне» с точки зрения пользовательского интерфейса (они не рисуются непосредственно на экране), но по умолчанию они не находятся в «фоне» с точки зрения потоков.

Это разумный подход или в Android SDK есть что-то, что могло бы сделать это проще?

Невозможно ответить, учитывая то, что вы написали выше. Вы, кажется, думаете, что кнопка важна - вероятно, это не так. Что, вероятно, важно, так это то, что этот «объект» состоит в том, что вы «наблюдаете» ... и вы не сказали, что это такое.

Если ваша служба надежно отменит регистрацию в stopService(), вы не должны сталкиваться с проблемами сбора мусора при таком подходе. Тем не менее, обработка потоков относительно наблюдателя / наблюдаемой модели обычно является обязанностью наблюдаемой - в данном случае, таинственного «объекта».

...