2014-09-02 64 views
1

我在android中创建了一个持续运行的服务,所以我想前台服务是最好的选择。我有一些关于android的前台服务的一般问题,因为我即将实现它。谷歌文档没有帮助我。前台服务相关的问题android

  1. 当前台服务可以被杀死?
  2. 我们是否需要将前台服务定义为START_STICKY?
  3. 我们是否需要重新启动android BOOt上的前台服务,否则它们会自动启动。
  4. 我们可以一次从同一个应用程序启动多少个前台服务。我在google文档中以非常拙劣的方式阅读过某个地方,我们可以一次提名3个前台服务,这是什么意思?
  5. 顾名思义,前台服务会中断主线程还是UI线程?

关注 Utsav。

+0

检查这..这可能会给你更多的信息。 http://commonsware.com/blog/2013/07/30/notifications-foreground-services-android-4p3.html – User12111111 2014-09-02 11:38:13

回答

2
1. When a foreground service can be killed? 

托管前台服务的过程看作是一个前台进程。这样的过程被认为是最重要的,最后被杀死。从docs

通常,在任何给定时间只有少数前台进程存在。 他们只是作为最后的手段被杀 - 如果内存太低,他们不能全部继续运行。通常,此时,设备已达到内存分页状态,因此需要保留一些前台进程以保持用户界面的响应。

2. Do we need to define foreground service as START_STICKY? 

取决于您正在执行的任务。既然你刚才说的是不断运行的服务,我相信你可能需要它。该标志对于正常和前台服务具有相同的含义。 START_STICKY标志表示,如果服务在主机进程被终止后重新启动,服务的onStartCommand将以空目的被调用。这是使服务知道重新启动的一种方式。

3. Do we need to restart foreground services on android BOOt or they automatically start. 

号您需要注册一个广播接收器为Intent.ACTION_BOOT_COMPLETEDonReceive手动启动该服务。

4. How many foreground services can we start from the same application at a time. 
I have read somewhere in very obsequious manner in google docs that we can nominate 3 foreground service at a time, what does that mean? 

不确定,如果您可以共享源代码,那将是非常好的。无论您有1或3个前台服务,托管它的进程都被视为前台进程。托管多个前台服务会导致状态栏中出现多个通知,这会让用户意识到正在运行的服务并知道如何停止它们。您还可以拥有一个运行不同操作的多个线程的前台服务。

5. As the name suggests does the foreground service interrupts the main or UI thread? 

如上所述,前台服务使得进程托管它作为前台进程并且用户知道该服务。除此之外,与正常服务完全没有区别。服务将默认在UI线程上运行,长时间运行的操作需要在单独的线程上运行。如果设备具有多个核心处理器,线程可能可能不是并行运行在可用的核心上。你可以阅读@fadden写的blog。来自博客:

有时候人们想知道为什么他们的多线程应用程序不会使用 似乎在使用所有可用的内核。这通常发生在两个原因:

  1. 核心之间迁移线程昂贵,性能明智;
  2. 激活一个CPU内核是昂贵的,电池方面。

P.S. :持续运行的服务总是被视为android中的反模式,因为它们不断地使用系统资源,从而间接地影响其他应用程序。因此,如果有必要使用它们,请仔细设计它们。

+0

感谢您保持答案短而脆。祝贺50分:) – 2014-09-06 06:10:42