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 内核的成本很高,而且需要电池。
附: :持续运行的服务在android中总是被视为反模式,因为它们不断地使用系统资源,从而间接影响其他应用程序。因此,如果必须使用它们,请仔细设计它们。