2013-10-31 62 views
0

我正在編寫一個服務使用AIDL遠程調用方法。我能夠成功連接到服務,並且還可以調用其上的方法。但是,如果我嘗試調用onServiceConnected()中的方法,則會收到空指針異常。代碼片段如下。android遠程服務在單獨的進程中運行,並從onserviceconnected()調用方法

@Override 
public void onServiceConnected(ComponentName name, IBinder service) { 
Log.v(TAG, "service connected"); 
serviceObj = <AIDL Interface>.Stub.asInterface(service) 
if(serviceObj != null) { 
    serviceObj.getMyMethod(); // Throws Null Pointer Exception, why??? 
} 
} 

此外,在清單中,我已經定義的服務標籤以下屬性:

android:process=":remote" 

但是,如果我調用serviceObj.getMyMethods()其他地方,例如在點擊一個GUI按鈕,我沒有得到這樣的錯誤,並且方法成功返回。另外,如果我刪除上面的「:remote」屬性,我不會在相同的代碼中得到這個錯誤。

我想這是與在不同進程中運行應用程序和服務相關的問題,但無法找出確切原因。有任何想法嗎?

回答

1

最後我想通了。由於Context.startService()是異步調用,因此發生了一些內部崩潰/空指針異常。當onStartCommand()執行某些任務時,並行調用的serviceObj方法會崩潰,因爲它需要進行一些初始化,這些初始化發生在onStartCommand()中。

相關問題