【问题标题】:Questions related to foreground Service android前台服务android相关问题
【发布时间】:2014-10-26 15:46:07
【问题描述】:

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

  1. 什么时候可以终止前台服务?
  2. 我们是否需要将前台服务定义为 START_STICKY?
  3. 我们是否需要在 android BOOt 上重新启动前台服务,否则它们会自动启动。
  4. 我们一次可以从同一个应用程序启动多少个前台服务。我在谷歌文档的某个地方读到我们可以一次提名 3 个前台服务,这是什么意思?
  5. 顾名思义,前台服务是中断主线程还是UI线程?

问候 乌萨夫。

【问题讨论】:

标签: android android-service


【解决方案1】:
 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。来自博客:

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

  1. 在内核之间迁移线程是昂贵的,性能方面;
  2. 激活 CPU 内核的成本很高,而且需要电池。

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

【讨论】:

  • 感谢您的回答简短明了。并恭喜您获得 50 分 :)
猜你喜欢
  • 1970-01-01
  • 2022-08-04
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多