Tag: serviceconnection

Android如何等待服务实际连接?

我有一个活动调用IDownloaderService.aidl中定义的服务: public class Downloader extends Activity { IDownloaderService downloader = null; // … 在Downloader.onCreate(Bundle)我试图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(…))之后的代码实际上是在调用ServiceConnection.onServiceConnected之前进行的 – 也就是说,当下载器仍然为空时 – 这会让我陷入困境。 ApiDemos中的所有示例通过在用户操作触发时仅调用服务来避免此时间问题。 但是在bindService成功后我该怎么做才能正确使用这个服务呢? 我如何等待ServiceConnection.onServiceConnected被可靠地调用? 另一个问题有关。 是否所有的事件处理程序:Activity.onCreate,任何View.onClickListener.onClick,ServiceConnection.onServiceConnected等实际上调用在同一个线程(在文档中提到的“主线程”)? 它们之间是否存在交错,或者Android会安排逐个处理所有事件? 或者,什么时候ServiceConnection.onServiceConnected实际上被调用? 完成Activity.onCreate或A.oC仍在运行的某个时间?