【问题标题】:How does startForeground affect threads started in an android service?startForeground 如何影响在 android 服务中启动的线程?
【发布时间】:2015-02-23 19:28:43
【问题描述】:

如果您有一个作为服务运行的长时间运行的程序,您应该启动一个线程来完成这项工作,因为该服务在主应用程序的线程中运行。 我不明白的是,您可以通过说“startForeground()”将服务标记为重要,但该特征与服务(可能是服务对象)相关联,与线程无关。

此特征如何影响在服务的 onStartCommand 调用中启动的线程的寿命?

我的意思是,android 怎么知道不杀死那个线程,因为它不是被标记为前台的线程,而是被标记的服务。 如果我启动 5 个线程怎么办?我找不到任何文档来解释服务的前景与服务产生的线程的优先级之间的关系。

【问题讨论】:

    标签: android service foreground


    【解决方案1】:

    因为服务运行在主应用程序的线程中

    对象不在 Java 中的线程上运行。方法可以。服务的生命周期方法(例如,onStartCommand())在主应用程序线程上调用。

    此特征如何影响在服务的 onStartCommand 调用中启动的线程的寿命?

    startForeground() 使 Android 不太可能由于年老、内存不足等原因而自动终止您的进程。

    android怎么知道不杀那个线程

    Android 不会自行终止线程。 Android 会自行终止进程。

    如果我启动 5 个线程会怎样?

    然后你启动 5 个线程。

    我找不到任何文档来解释服务的前景与服务产生的线程的优先级之间的关系。

    他们之间没有任何关系。您也不会找到任何解释“服务的前景”与 Android 书籍作者的头发数量之间关系的文档。

    此外,您似乎将线程的寿命和优先级混为一谈,它们之间也没有任何关系,尽管这更像是 Java 的事情而不是 Android 的事情。

    【讨论】:

    • 啊,你说的关键点是 Android 会自行终止进程。我认为它只会杀死服务而不是整个应用程序。所以你真正要做的是将整个应用程序标记为重要,而不仅仅是服务。
    • 我倾向于同意你的观点,因为这更有意义,但是这个developer.android.com/reference/android/app/Service.html 专门提到了该服务。但它也说:与服务在同一进程中运行的其他应用程序组件(例如 Activity)当然可以提高整个进程的重要性,而不仅仅是服务本身的重要性。这有助于您对适用于整个过程的杀戮的观点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多