bindService не работает внутри нажатия кнопки, но работает в onCreate - android - PullRequest
2 голосов
/ 02 сентября 2010

У меня довольно простой локальный сервис, который я пытаюсь привязать к своей деятельности.Я работал через это вчера с CommonsWare, и он выправил меня, так как мне было трудно получить привязку сервиса.Оказывается, причина, по которой у меня было так много проблем, заключалась в том, что я пытался связать сервис с:

bindService(new Intent(this, myService.class), mConnection, Context.BIND_AUTO_CREATE);

внутри пустого метода, который вызывался после нажатия кнопки.

private void doBindService() {
            bindService(new Intent(this, SimpleService.class), mConnection, Context.BIND_AUTO_CREATE);
            mIsBound = true;
        }

       private OnClickListener startListener = new OnClickListener() {
        public void onClick(View v){
            doBindService();
        }               
       };

когда я переместил свой вызов bindService () в метод onCreate действия, он работает нормально.CommonsWare упомянул кое-что о том, что этот вызов асинхронный, и я недостаточно знаю о создании активности Android, чтобы понять, была ли это моя проблема или нет.Я действительно знаю, что мой onServiceConnection () вызывался внутри моего ServiceConnection () при нажатии кнопки, мой mBoundService не работал, когда я пытался получить доступ к членам внутри сервиса.

Может кто-нибудь сказать мне, почему этоне работает внутри нажатия кнопки, но работает внутри onCreate ()?

TIA

1 Ответ

2 голосов
/ 02 сентября 2010

Ссылка this внутри doBindService не одинакова в обоих случаях. Если вызывается в onCreate, это будет ссылка на Activity, если вызывается с помощью нажатия кнопки, это будет ссылка на OnClickListener. Очевидно, вы не хотите, чтобы ваша служба была привязана к слушателю нажатия кнопок.

Попробуйте изменить this на YOURACTIVITYNAME.this и посмотрите, поможет ли это.

...