与前台服务android相关的问题

时间:2014-09-02 11:29:18

标签: android android-service

我正在android中创建一个持续运行的服务,所以我认为前台服务是最好的选择。我对android中的前台服务有一些一般性的问题,因为我即将实现它。 Google文档没有帮助我。

  1. 什么时候可以杀死前台服务?
  2. 我们是否需要将前台服务定义为START_STICKY?
  3. 我们是否需要在android BOOt上重启前台服务,否则它们会自动启动。
  4. 我们可以一次从同一个应用程序启动多少个前台服务。我在谷歌文档中以非常痴迷的方式阅读过,我们可以一次提名3个前台服务,这意味着什么?
  5. 顾名思义,前台服务是否会中断主线程或UI线程?
  6. 此致 UTSAV。

1 个答案:

答案 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。来自博客:

  

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

     
      
  1. 在核心之间迁移线程是昂贵的,性能方面的;
  2.   
  3. 以电池方式激活CPU内核非常昂贵。
  4.   

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

相关问题