bindService没有调用我的服务类的onCreate方法

时间:2013-07-20 01:09:30

标签: android android-service

我正在尝试将服务绑定到我的活动以及执行此代码之后的某些原因:

new Thread(new Runnable() {
    public void run() {
        httpdIntent = new Intent(MainActivity.this, HttpdService.class);
            bindService(httpdIntent, mConnection, Context.BIND_AUTO_CREATE);
        }
    }).start();

没有其他事情发生。没有例外,但onCreate方法不会像它应该的那样被调用。我可能误解了它是如何工作的但是我想在运行这个线程之后应该立即创建服务。这不正确吗?任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:6)

当服务绑定时,它将调用服务的onBind()方法,而不是onCreate()。查看此图像,其中显示了绑定服务的生命周期(取自docs):

enter image description here

实际上,调用服务的onCreate方法的唯一方法是使用startService()方法调用它。根据文档here

  

如果有人调用Context.startService(),系统将检索   服务(创建它并在需要时调用其onCreate()方法)   然后用它调用它的onStartCommand(Intent,int,int)方法   客户提供的论据。


在任何情况下,如果您希望调用onCreate()服务,您只需在绑定它之前启动服务:

Intent startIntent = new Intent(this, MyService.class);
startService(startIntent);
bindService(startIntent, mConnection, Context.BIND_AUTO_CREATE);