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_COMPLETED和onReceive
手动启动该服务。
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。来自博客:
有时候人们想知道为什么他们的多线程应用程序不会使用 似乎在使用所有可用的内核。这通常发生在两个原因:
- 核心之间迁移线程昂贵,性能明智;
- 激活一个CPU内核是昂贵的,电池方面。
P.S. :持续运行的服务总是被视为android中的反模式,因为它们不断地使用系统资源,从而间接地影响其他应用程序。因此,如果有必要使用它们,请仔细设计它们。
检查这..这可能会给你更多的信息。 http://commonsware.com/blog/2013/07/30/notifications-foreground-services-android-4p3.html – User12111111 2014-09-02 11:38:13