Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于启动服务的Android onCreate或OnStart命令_Android_Android Service_Oncreate - Fatal编程技术网

用于启动服务的Android onCreate或OnStart命令

用于启动服务的Android onCreate或OnStart命令,android,android-service,oncreate,Android,Android Service,Oncreate,通常在创建Android服务时,我会实现onCreate方法,但在我的上一个项目中,这不起作用。我尝试实现了onStartCommand,这似乎奏效了 问题是:当我必须实现服务时,需要哪种方法?我必须实施哪些方法onCreate,onStartCommand,还是两者都有?每个对象的作用是什么?onCreate()在实例化服务对象时被调用(即:创建服务时)。你应该用这个方法做一些你只需要做一次的事情(比如:初始化一些变量等等)onCreate()将只对每个实例化对象调用一次 如果您确实想/需要初

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

问题是:当我必须实现服务时,需要哪种方法?我必须实施哪些方法
onCreate
onStartCommand
,还是两者都有?每个对象的作用是什么?

onCreate()
在实例化
服务
对象时被调用(即:创建服务时)。你应该用这个方法做一些你只需要做一次的事情(比如:初始化一些变量等等)
onCreate()
将只对每个实例化对象调用一次

如果您确实想/需要初始化某个东西,只需实现一次
onCreate()

每当客户机使用
startService(Intent)
启动服务时,都会调用
onStartCommand()
。这意味着可以多次调用
onStartCommand()
。每次客户向您的服务请求内容时,您都应该使用此方法执行所需的操作。这在很大程度上取决于您的服务做什么,以及它如何与客户沟通(反之亦然)

如果不实现
onStartCommand()
,则无法从客户端传递给
onStartCommand()
Intent
中获取任何信息,并且您的服务可能无法执行任何有用的工作

服务的行为类似于活动您想将与服务关联一次的任何内容都将进入
onCreate
类似于初始化

并且无论何时使用startService调用
服务
<将调用code>onstart命令。您可以传递任何要执行的操作。就像音乐播放器一样,你可以播放、暂停、停止使用动作

您可以在服务中执行任何
操作
,方法是在
onStartCommand

onCreate
像构造函数一样工作

简而言之编辑

onCreate()
仅在您第一次启动
服务时调用,而
onStartCommand()
则在您每次再次调用
启动服务时调用。它可以让你设置像播放、停止、暂停音乐这样的动作

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

同一个应用程序中是否存在两个相同服务的实例?@jacktrades理论上并根据文档:否。然而,Android中似乎存在一些缺陷,在某些情况下,它确实会创建一个服务的多个实例。然而,正如我所说,这是一个bug,我们无法随意可靠地复制它。“你为什么要问?”先生和夫人:“据我所知,没有官方的错误报告。”。然而,有一些关于这种情况的报告,我有一个应用程序,我知道它正在发生。我一直无法将问题简化为一些小的、可重复的问题,因此我自己没有提出一个bug。文档中没有明确说明服务是单例的,但很明显,这就是本文的目的。查看“startService()”的文档:明确指出,如果该服务尚未运行,则将创建并启动该服务;如果该服务正在运行,则将保留该服务running@Diffy调用
startService()
时,如果服务未运行,Android将创建服务类的实例(这是一个服务对象)然后对该对象调用
onCreate()
。然后它将对该对象调用
onStartCommand()
。如果一段时间后,您再次调用
startService()
,如果服务仍在运行,Android将不会创建新的服务对象。相反,它将只调用现有服务对象上的
onStartCommand()
。明白了吗?我爱你!(y) 像魔术一样工作(y)非常简单而且很好的解释所以当我使用startService(intent)调用服务时,会不会调用onCreate()?我不太理解什么是“服务对象”,因为我总是通过StartDevice(intent)启动服务。您是否正确地实例化了服务对象,或者您的manifeststart服务中可能没有该服务,比如startService(new intent(这个,ServiceName.class));但是这个方法叫做实例化服务吗?那么服务对象在哪里呢?它是一种调用活动和服务的方式,使用意图负责在Android中打开活动和服务。您想对服务对象做什么,也可以有目的地做。我的意思是将数据传递到服务
onCreate
总是被调用,而不管它是什么