2010-09-25 6 views
2

Я новичок, который сделал простую программу, чтобы показать, как работают сервисы.Почему вызов onServiceConnected не вызван?

..... 
toStartService = new Intent(this, SimpleService.class); 
    sc = new ServiceConnection() {    
     @Override 
     public void onServiceConnected(ComponentName name, IBinder service) { 
      Toast.makeText(MoreService.this, "SC: Binded", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      Toast.makeText(MoreService.this, "SC: Unbinded", Toast.LENGTH_SHORT).show(); 
     }  
    }; 


    startService.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(MoreService.this, "Starting Service", Toast.LENGTH_SHORT).show(); 
      startService(toStartService);   
     } 
    }); 

    stopService.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      stopService(toStartService); 
     } 
    }); 

    bindService.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if((isBound = bindService(toStartService, sc, BIND_AUTO_CREATE))) { 

      } 
     } 
    }); 

    unbindService.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(isBound) { 
       unbindService(sc); 
       isBound = false; 
      } 
     } 
    }); 

} 

Почему не передавая переменную подкожно (на bindService()) вызвать метод sc.onServiceConnected()? Что не так с кодом?

Я встретил этого следующее условие:

  • Когда я нажимаю [StartService] сервис начал хорошо, то [StopService] служба купировались хорошо.

  • Когда я нажимаю [startService], тогда [bindService] ничего не делает, ни [unbindService].

  • Когда я нажимаю [bindService], его созданная служба, [stopService] не работает. Я нажимаю [unbindService], что служба вызывает метод onDestroy().

Почему служба, созданная bindService, разрушается при несвязанных? Я пытаюсь запустить сервис с помощью startService, но он не может связываться.

Принесите помощь, извините, если я был неправ.

+0

У меня точно такая же проблема. Теперь я понимаю, почему многие люди ненавидят Java ... В любом случае будьте очень осторожны, когда говорите «что не так с кодом», потому что на этом сайте есть миллионы притворяющихся «полицейских», которые ничего не делают, кроме как обсуждать вопросы как твой. –

ответ

2

Это разработанное поведение всех этих методов. Например, в методе bindService(Intent service, ServiceConnection conn, int flags) по the documentation, сервис будет работать только до тех пор, как вызывающий контекст существует:

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

Для unbindService (ServiceConnection conn) документация говорит:

Отключение от службы приложения. Вы больше не будете получать вызовы при перезапуске службы, и теперь услуге разрешается останавливаться в любое время.

В startService (Intent service) documentation он говорит:

Использование startService() переопределение прижизненные службы по умолчанию, который управляется bindService(Intent, ServiceConnection, int): он требует обслуживания, чтобы оставаться не работает до stopService(Intent) называется, независимо от того, связаны ли какие-либо клиенты к нему. Обратите внимание, что вызовы startService() не вложены: независимо от того, сколько раз вы звоните startService(), один звонок на stopService(Intent) остановит его.

+0

спасибо: «служба будет работать только до тех пор, пока существует контекст вызова», то как мне привязать к уже запущенной службе? –

+0

Если служба запускается с помощью 'startService', вы можете привязываться к ней, и она будет работать после того, как вы отмените привязку, но если она была запущена' bindService', то она будет работать только до тех пор, пока существует контекст вызова. – Brian

+0

О, я просто вставляю mBinder в метод onBind службы, а затем ServiceConnection работает сейчас! Почему это может быть так? –

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