Привязка нескольких операций (вкладок) к сервису с помощью действия базового класса - PullRequest
3 голосов
/ 31 декабря 2011

Найдено после публикации:

http://code.google.com/p/android/issues/detail?id=2665 http://code.google.com/p/android/issues/detail?id=2483

MyApp - first Activity that calls startService();
AwesomeService - background Service that starts a "connection" thread
ConnectedActivity - Activity with code to handle connection and service binding
MyAppActivity - Tabbed Activity
TabAActivity - Tab Activity

У меня есть базовый класс Activity, который называется ConnectedActivity. В этом классе я выполняю привязку к фоновой службе, которая подключена к удаленной системе. ConnectedActivity также имеет методы-наблюдатели, которые фиксируют изменения в соединении и другие уведомления от службы.

Для других моих действий, которые необходимо «подключить», я просто расширяю ConnectedActivity.

Я разработал операцию с вкладками, для которой вкладки также являются активностями. Для работы с вкладками и каждой вкладки мне нужно расширить ConnectedActivity.

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

Ниже serviceBound () - это обратный вызов, который я реализовал в классе ConnectedActivity, чтобы классы, расширяющие ConntectedActivity, могли предпринимать действия после привязки службы. Из моего файла журнала видно, что только MyAppActivity фактически является обязательным.

Возможно ли привязать несколько Сервисов к Сервису?

РЕДАКТИРОВАТЬ: нашел это здесь

Несколько клиентов могут подключиться к услуге одновременно. Однако система вызывает метод onBind () вашей> службы для получения IBinder только тогда, когда первый клиент связывается. Затем система доставляет тот же IBinder всем дополнительным клиентам, которые связываются, без повторного вызова onBind ()

Так что теперь мой реальный вопрос становится ... означает ли это, что обратные вызовы (onServiceConnected () и onServiceDisconnected) не вызываются во "втором" действии, которое связывает?

КОНЕЦ РЕДАКТИРОВАНИЯ:

12-31 02:40:00.625: I/MyApp(31345): onCreate(Bundle savedInstanceState)
12-31 02:40:00.705: I/AwesomeService(31345): onCreate()
12-31 02:40:00.705: I/AwesomeService(31345): onStartCommand(Intent intent, int flags, int startId)
12-31 02:40:00.725: I/ConnectedActivity(31345): onCreate(Bundle savedInstanceState)
12-31 02:40:00.725: I/MyAppActivity(31345): onCreate(Bundle savedInstanceState)
12-31 02:40:00.836: I/ConnectedActivity(31345): onCreate(Bundle savedInstanceState)
12-31 02:40:00.836: I/TabAActivity(31345): onCreate(Bundle savedInstanceState)
12-31 02:40:00.896: I/ConnectedActivity(31345): onStart()
12-31 02:40:00.896: I/TabAActivity(31345): onStart()
12-31 02:40:00.956: I/ConnectedActivity(31345): onStart()
12-31 02:40:00.966: I/MyAppActivity(31345): onStart()
12-31 02:40:00.966: I/ConnectedActivity(31345): onResume()
12-31 02:40:00.966: I/MyAppActivity(31345): onResume()
12-31 02:40:00.966: I/ConnectedActivity(31345): onResume()
12-31 02:40:00.966: I/TabAActivity(31345): onResume()
12-31 02:40:00.976: I/AwesomeService(31345): onBind(Intent intent)
12-31 02:40:01.056: I/ConnectedActivity(31345): onServiceConnected(ComponentName className, IBinder service)
12-31 02:40:01.056: I/AwesomeService(31345): LocalBinder:getService()
12-31 02:40:01.056: I/MyAppActivity(31345): serviceBound()

Я также надеялся увидеть:

AwesomeService(31345): onBind(Intent intent)
ConnectedActivity(31345): onServiceConnected(ComponentName className, IBinder service)
AwesomeService(31345): LocalBinder:getService()
TabAActivity(31345): serviceBound()

1 Ответ

1 голос
/ 31 декабря 2011

Хорошо, так что, возможно, я был избалован ранее, используя stackoverflow.com и получая быстрые ответы.Может быть, это так близко к Новому году, и у всех, кроме меня, есть жизнь, я был вынужден копать глубже!Я отредактировал вышеуказанный пост, добавив в него следующие ссылки:

http://code.google.com/p/android/issues/detail?id=2665 http://code.google.com/p/android/issues/detail?id=2483

Наиболее интересная информация, найденная по одной из этих ссылок, - этоФактическое решение:

Комментарий 2 от olivier .... @ gmail.com, 28 июня 2009 г. Использование getApplicationContext (). bindService вместо простого bindService в вашей деятельности решает проблему, так как она используетконтекст приложения более высокого уровня.

Чтобы добавить к комментарию Оливье, убедитесь и используйте тот же контекст для вызова unBindService ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...