我正在android中创建一个持续运行的服务,所以我认为前台服务是最好的选择。我对android中的前台服务有一些一般性的问题,因为我即将实现它。 Google文档没有帮助我。
此致 UTSAV。
答案 0 :(得分:3)
1. When a foreground service can be killed?
托管前台服务的流程被视为前台流程。这样的过程被认为是最重要的,最后被杀死。来自docs:
通常,在任何给定时间只存在少数前台进程。 他们只是作为最后的手段被杀死 - 如果记忆力太低以至于他们 不可能都继续运行。通常,此时,设备具有 达到内存分页状态,因此杀死一些前台进程 需要保持用户界面的响应。
2. Do we need to define foreground service as START_STICKY?
取决于您正在执行的任务。既然你刚刚说过不断运行的服务,我相信你可能需要它。该标志对普通和前台服务具有相同的含义。 START_STICKY
标志表示,如果服务在其主机进程被杀死后重新启动,则将使用null intent调用服务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中始终被视为反模式,因为它们不断使用系统资源,从而间接影响其他应用程序。因此,如果必须使用它们,请仔细设计它们。