2010-09-02 3 views
2

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

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()?

ТИА

ответ

2

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

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

+0

@ chris324 - спасибо за ответ, но если вы посмотрите более тщательно, bindService() вызывается из метода void, который является частью класса активности, который вызывается из клика. Так что, во всяком случае, «это» будет относиться к деятельности, не так ли? – Kyle

+0

Нет, не имеет значения, где определена функция. Он вызван из другого класса, и поэтому 'this' будет указывать на то, что – Falmarri

+0

хорошо спасибо .... Я не знал этого: / – Kyle

Смежные вопросы