2010-01-11 82 views
2

我正在使用AIDL在客戶端活動和服務之間執行IPC。使用bindService()綁定服務時,ServiceConnection.onServiceConnected()似乎運行。但是,在釋放服務時調用unbindService()之後,沒有任何跡象表明ServiceConnection.onServiceDisconnected()會運行。任何人都可以提供任何見解,爲什麼會發生這種情況?AIDL ServiceConnection.OnServiceDisconnected()未調用

發現在這個問題上這裏另一個線程: When does ServiceConnection.onServiceDisconnected() get called?

這並不完全回答我的問題。我的服務沒有任何例外。

這裏是我的服務結合和釋放代碼:

//bind service 
private void initService() 
{ 
    conn = new NetServiceConnection(); 
    Intent i = new Intent(); 
    i.setClassName("framework.network", "framework.network.NetService"); 
    bindService(i, conn, Context.BIND_AUTO_CREATE);//This returns TRUE 
} 

//unbind service 
private void releaseService() 
{ 
    unbindService(conn); 
    conn = null; 
} 

class NetServiceConnection implements ServiceConnection 
{ 

    //THIS RUNS FINE 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     mService = INetService.Stub.asInterface(service); 
      Log.d("ADDERSERVICECLIENT","onServiceConnected"); 
    } 

    //THIS DOESN'T RUN 
    public void onServiceDisconnected(ComponentName name) { 
     mService = null; 
     Log.d("ADDERSERVICECLIENT","onServiceDisconnected"); 
    } 
}; 

任何幫助是非常讚賞。提前致謝。

回答

4

我不明白你鏈接到的問題與這個問題有什麼不同?

你的服務沒有失敗—你正在手動呼叫unbindService(),所以沒有錯誤情況發生會導致onServiceDisconnected()被調用。

4

OnServiceDisconnected()在與服務的連接丟失時被調用。這通常發生在承載服務的進程崩潰或被殺死時。

以更簡單的方式:::

當與服務的連接已經斷開,意外這就是所謂的 - 也就是說,其過程被撞壞。

希望這可以解決你的問題。