2

我正在尝试将服务绑定到我的活动,并且在执行这段代码后出于某种原因:

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

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

4

1 回答 1

8

当服务绑定时,它会调用onBind()服务的方法,而不是onCreate(). 查看这张图片,它显示了绑定服务的生命周期(取自文档):

在此处输入图像描述

事实上,调用服务方法的唯一方法onCreate就是使用方法调用它startService()。根据这里的文档:

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


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

Intent startIntent = new Intent(this, MyService.class);
startService(startIntent);
bindService(startIntent, mConnection, Context.BIND_AUTO_CREATE);
于 2013-07-20T01:43:40.070 回答