用于启动服务的 Android onCreate 或 onStartCommand

通常,当我创建一个 Android 服务时,我会实现 onCreate方法,但在我上一个项目中,这个方法不起作用。我尝试实现 onStartCommand,这似乎工作。

The question is: when I have to implement a service which method is required? Which methods I have to implement? onCreate, onStartCommand, or both? And what is the role of each?

93941 次浏览

onCreate() is called when the Service object is instantiated (ie: when the service is 被创造出来). You should do things in this method that you need to do only once (ie: initialize some variables, etc.). onCreate() will only ever be called once 每个实例化对象.

只有当您实际想要/需要初始化某个 只有一次时,才需要实现 onCreate()

onStartCommand()被称为 每次都是,客户端使用 startService(Intent intent)启动服务。这意味着 onStartCommand()可以被多次调用。您应该在此方法中执行所需的 每一次操作,客户端从您的服务请求某些东西。这在很大程度上取决于您的服务是做什么的,以及它如何与客户端进行通信(反之亦然)。

如果您不实现 onStartCommand(),那么您将无法从 Intent获得客户机传递给 onStartCommand()的任何信息,您的服务可能无法做任何有用的工作。

服务的行为与 Activity 相同,无论你想要 associate什么,只要使用一次服务,就会像初始化一样进入 onCreate

以及每当使用 StartService调用 service时。将调用 onStartCommand。并且可以传递要执行的任何操作。像一个音乐播放器,你可以播放,暂停,停止使用行动

And you do any operation in service by sending an action and receiving it on onStartCommand

onCreate像构造函数一样工作。

简短编辑

onCreate()仅在您第一次启动 Service时调用,而 onStartCommand()在您每次再次调用 startService时调用。它让你设置一个动作,如播放,停止,暂停音乐。

public void onStartCommand()
{
if(intent.getAction.equals("any.play")
{
//play song
}
else if(intent.getAction.equals("any.stop")
{}
}