我有一個活動呼叫中IDownloaderService.aidl定義的服務:Android如何等待服務實際連接?
public class Downloader extends Activity {
IDownloaderService downloader = null;
// ...
在Downloader.onCreate(束)我試圖bindService
Intent serviceIntent = new Intent(this, DownloaderService.class);
if (bindService(serviceIntent, sc, BIND_AUTO_CREATE)) {
// ...
和內ServiceConnection對象SC我這樣做
public void onServiceConnected(ComponentName name, IBinder service) {
Log.w("XXX", "onServiceConnected");
downloader = IDownloaderService.Stub.asInterface(service);
// ...
通過添加各種Log.xx,我發現if(bindService(...))之後的代碼實際上是BEFORE ServiceConnection.onSer viceConnected正在被調用 - 也就是說,當下載器仍然是空的 - 這讓我陷入困境。 ApiDemos中的所有示例通過在用戶操作觸發時僅調用服務來避免此時間問題。但是我應該怎麼做才能在bindService成功後正確使用這個服務?我如何等待ServiceConnection.onServiceConnected被可靠地調用?
另一個問題有關。是否所有的事件處理程序:Activity.onCreate,任何View.onClickListener.onClick,ServiceConnection.onServiceConnected等實際上是在同一個線程中調用的(在doc中稱爲「主線程」)?它們之間是否存在交錯,或者Android會安排逐個處理所有事件?或者,什麼時候ServiceConnection.onServiceConnected實際上會被調用?完成Activity.onCreate或A.oC仍在運行時?
如果你仍然需要一個答案,我給了一個解決方案在http://stackoverflow.com/a/22134635/1336747 – Alessio 2014-03-02 22:43:29
@Alessio,我不認爲你的解決方案實際工作。 – Sam 2015-06-19 08:44:23