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

标签 android multithreading service

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

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

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

最佳答案

这有多种原因:

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

关于android - 为什么android服务运行在UI线程上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26556746/

相关文章:

java - Eclipse 找不到 java.rmi.Remote 类

Android ImageView问题

android - 使用 kotlin 的 WebView 中的进度条

c - 在线程内创建变量和传递指针的问题

android - 应用程序运行时重复后台查询

macos - Mac OS X 服务 : enable without user interaction?

java - 是否有可能在 Android 蓝牙和笔记本电脑蓝牙设备之间建立不安全的连接?

c# - 线程完成后捕获异常

c++ - 在 C++ 中为函数计时

c++ - 从应用程序代码运行服务中提取窗口句柄