正在启动 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 服务?的主要内容,如果未能解决你的问题,请参考以下文章

正在启动 Android 服务?

应用程序被杀死时Android后台服务正在重新启动

android 一个程序可以启动多少个服务

如何检查由单独 Android 应用程序中的服务启动的 Android 应用程序是不是已完成加载?

在启动时启动 Kivy 服务 (Android)

转android SystemServer.java启动的服务都有哪些