从 Activity
和从 Activity
启动的 Service
运行后台线程有什么不同吗? 添加:后台线程不与 UI 交互。
我目前有一些从 Activity
启动的后台线程。大多数是通过 AsyncTask
,一个是通过我自己的 ExecutorService
。我想知道重构代码以将它们移动到 Service
或 IntentService
是否有重大好处。
最佳答案
您似乎对 Activity 和服务的定义感到困惑。说清楚:
- Activity 是根据 Activity 生命周期状态机运行的事物。各个处理程序中的代码与附加到 UI 的事件循环交互。
- 服务 是根据服务生命周期状态机运行的事物。各个生命周期处理程序中的代码执行操作来处理 Intents 等...,但不通过 UI 与用户交互。
然而,这两者都在应用程序的“主线程”上运行。 Activity 或 Service(或 Broadcast Receiver、Content provider 等)本身不是线程。查看文档,您会发现 Activity 和 Service 类实际上并没有形成线程。相反,它们是将在 Android 框架内运行的 Hook ,框架将在适当的时候在应用的“主”线程上调用它们。
您可以为应用程序创建单独的线程,或使用 AsyncTask
来完成工作并将其轻松发布到 UI 线程(使用服务不太容易实现) ).
关于安卓后台线程 : Difference between launching from an Activity and from a Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10970666/