2012-12-06 142 views
2

此問題與此問題有關 - android bindservice強烈。有沒有什麼辦法可以延遲執行onServiceConnected()?

我根據問題的情況來解釋我的情況。

就我而言,發生NullPointerException是因爲在bindService()和onServiceConnected()之間使用了mService變量。

Var mService通常用於其他活動,有時特別在onCreate()中使用。

它很少發生,但我想避免它。

有沒有某種官方的方式?

我試圖用一個簡單的線程來等待使用sleep()完成onServiceConnected()。 但是,我不確定這是否是一種好方法。

+0

「Var mService經常用於其他活動,有時尤其是在onCreate()中。」所以你的mService變量是靜態的,它被用在多個Activity中? –

+0

@UngureanuLiviu mService不是靜態的,不公開的。它是通過getter方法公開的。這是正確的,它被多個Activity調用。 – JaycePark

回答

0

我不確定如何做到這一點。但我仍然建議使用更好的等待/通知而不是睡眠。

0

也許您可以在您的活動中創建一個新方法serviceConnected(),並從onServiceConnected()中調用它。

像這樣:

private ServiceConnection connection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder iservice) { 
     mService = ILocService.Stub.asInterface(iservice); 
     mBound = true; 
     **serviceConnected();** 
    } 

    public void onServiceDisconnected(ComponentName className) { 
     mService = null; 
     mBound = false; 
    } 

}; 

private void serviceConnected(){ 
    // here mService is **not** null 
} 
0

難道有某種正式的方式嗎?

移動的所有代碼引用mService到一個點,它不會被調用,直到onServiceConnected()已被調用。

我試圖用一個簡單的線程來等待使用sleep()完成onServiceConnected()。但是,我不確定這是否是一種好方法。

絕對不是。

+0

使用sleep()有什麼好處? – JaycePark

+1

@JaycePark:你阻塞了主應用程序線程,這意味着你的綁定永遠不會發生,因爲需要在主應用程序線程上調用onBind()和onServiceConnected()。 – CommonsWare

相關問題