为什么Android服务在UI线程上运行?

时间:2014-10-24 21:44:43

标签: android multithreading service

http://developer.android.com/guide/components/services.html

该页面首先说服务用于在后台运行长期任务。稍后在“警告:”中,它表示它们是在UI线程上运行的,任何密集的工作都应该在一个单独的线程中完成,就像置于IntentService的“onHandleIntent”回调中的代码一样。

如果onHandleIntent中的代码是服务的长期任务,并且在后台线程中运行,为什么他们说服务在UI线程上运行?

1 个答案:

答案 0 :(得分:2)

这有多种原因:

  1. UI线程是处理事件和绑定的方式,更容易理解如何与服务进行交互。这通常已经在UI线程上完成,因此在服务上启动功能也会更容易。
  2. 该服务是一个没有任何UI的组件,因此与活动相比,它使用的内存更少,与活动相比,内存泄漏的可能性也更小。
  3. 该服务可以在前台运行,使用户转到其他应用程序时被杀的可能性更小。
  4. 还有一个IntentService,它有一个只在后台线程上运行的函数(如果你希望轻松执行简单的后台任务)。
  5. Google不会强迫您以某种方式工作,而是让您决定如何以及在服务上执行什么操作。
  6. 它有自己的生命周期,不受UI的影响。它受资源使用和操作系统决策以及开发人员选择的影响更大。