2013-03-01 3 views
3

У меня есть IntentService, которые должны использовать ссылку из другой службы посредством связывания:IntentService и Binding Pattern

public class BaseIntentService extends IntentService implements ServiceConnection { 

    protected NetworkApi network; 

    public BaseIntentService() { 
     super("BaseIntentService"); 
    } 

    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     network = ((NetworkApiBinder) service).getApi(); 
     // never be invoked 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     bindService(new Intent(this, NetworkApi.impl), this, BIND_AUTO_CREATE); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     unbindService(this); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     // network always null!!! 
    } 
} 

Но когда я использую привязки, как это не onServiceConnected никогда не будет вызван. Я знаю, что IntentService не предназначен для шаблона привязки, но может быть, есть общее решение для таких задач?

Спасибо!

ответ

10

Но когда я использую привязки, как это не onServiceConnected никогда не будет вызываться

Это потому, что ваш IntentService уничтожается еще до того, начинается запрос связывания. IntentService автоматически уничтожается, когда onHandleIntent() выполняет все выдающиеся команды.

но может быть есть общее решение для таких задач

Не две услуги. Избавьтесь от IntentService и переместите его логику в другую службу.

+0

CommonsWare sir: Почему андроид препятствует связыванию IntentService с другими компонентами? – Kushal

+1

@ Kushal: Потому что «IntentService» должен быть недолговечным (от нескольких секунд до минуты или около того). «IntentService» автоматически уничтожается, когда 'onHandleIntent()' выполняет все выдающиеся команды. – CommonsWare

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