вызов метода из сервиса Android сразу после того, как он привязан к onCreate - PullRequest
3 голосов
/ 03 сентября 2010

Я почти уверен, что сервисы для Android станут моим концом.У меня почти не осталось волос после последних нескольких дней ....

... во всяком случае, я отвлекся.

Сначала у меня было чертовски много времени, когда служба связываласьпо нажатию кнопки, выправил это из справки здесь вчера.Теперь я на самом деле хочу привязать сервис в методе onCreate () действия.Эта часть не проблема, работает как задумано.Мой сервис на самом деле является сервисом сокетов для подключения сокетов TCP к серверу сокетов, который я написал.Если я помещу вызов метода из привязанного сервиса mBoundService.StartSocketServer () внутри нажатия кнопки, бинго, прекрасно работает.Но мне нужно, чтобы это запускалось сразу же при загрузке действия, поэтому непосредственно под моим вызовом bindService () внутри моего метода onCreate () действия.Когда я помещаю вызов для запуска сокета внутри моего onCreate (), я получаю принудительное закрытие.

Этот метод (StartSocketServer ()) порождает новый поток, а затем открывает сокет в этом потоке для моей удаленной машины.Я предполагаю, что проблема заключается в создании нового потока до того, как действие полностью загрузится ... не уверен.

LogCat здесь довольно загадочно.Он что-то говорит о неудачном присоединении к потоку, затем показывает исключение необработанного обработчика, в котором есть «Причины: java.lang.NullPointerException».

Опять же, если я помещу этот вызов в метод внутри нажатия кнопкиЯ нахожусь в бизнесе, если он в onCreate (), это терпит неудачу. Есть ли какой-то путь внутри действия (предполагая, что мое предположение правильно, что оно должно полностью загрузиться перед порождением нового потока), чтобы вызвать StartSocketServer () послеон загружен: ala body.onLoad () в html?

пожалуйста, помогите мне сохранить оставшиеся мои волосы:)

TIA

1 Ответ

3 голосов
/ 03 сентября 2010

Как я уже писал в вашем предыдущем вопросе :

FWIW, bindService () является асинхронным. У вас не будет связанного соединения, пока onServiceConnected () не будет позвонил на ваш ServiceConnection.

При вызове bindService() вы предоставляете объект ServiceConnection. Этот объект будет вызываться с onServiceConnected(), когда служба готова к использованию. Среди прочего, это, вероятно, где вы заселяете mService. Звоните на StartSocketServer() в onServiceConnected().

...