正在启动 Android 服务?
Posted
技术标签:
【中文标题】正在启动 Android 服务?【英文标题】:Starting Android service already running? 【发布时间】:2012-10-18 21:56:34 【问题描述】:当然,这是一个微不足道的问题。如果我使用以下代码启动Service
,会发生什么:
startService(new Intent(this,myService.class));
然后我不小心想起了上面的代码,而Service
还在运行?
恐怕第二次调用startservice
会创建一个新的Service
,以便同时执行两个不同的进程。
【问题讨论】:
一个服务只能有1个实例,不用担心多次调用。 【参考方案1】:恐怕第二次调用 startservice 会创建一个新服务,以便同时执行两个不同的进程。
不,在多个方面:
不,它不会创建新服务。如果服务已经在运行,它将再次使用onStartCommand()
调用,以传递新的Intent
,但不会创建第二个副本。
不,它不会“同时执行两个不同的进程”,因为默认情况下,服务与应用程序的其余部分在同一进程中运行。
【讨论】:
我正在使用意图服务从 url 下载视频。我通过从网站获取来显示列表中的视频。当用户单击列表元素时,下载会在意图服务中开始。如果用户单击另一个元素,则在第一个元素完成后会自动开始下一个下载。这真的让我很困惑。 @AnkitGarg:这正是IntentService
的行为方式。
那么这是否意味着 onStartCommand 持有(堆叠)新的服务调用并在第一个服务完成时执行它?
@AnkitGarg:onStartCommand()
在您调用startService()
时会立即(相对)调用。在IntentService
中,它将命令弹出到工作队列中,由后台线程和onHandleIntent()
处理。在正常情况下,该队列是空的,因为服务刚刚启动。而且,在正常情况下,onHandleIntent()
在发送新命令之前完成,因此服务关闭。在您的情况下,您正在处理第一个命令时发送第二个命令,因此第二个命令将在第一个命令完成后立即排队并处理。
@Sudhasri:我不确定上述讨论的哪一部分与您有关。我的回答适用于任何类型的Service
。如果您在这方面还有其他问题,我建议您提出一个新的 Stack Overflow 问题,在那里您可以更详细地解释您想了解的内容。以上是关于正在启动 Android 服务?的主要内容,如果未能解决你的问题,请参考以下文章