Activity和Service在同一个线程中运行



我在处理程序,服务和活动的基本概念上有一些混淆。我在很多地方看到提到服务在UI线程中运行。我有几个问题要问。

  • 上述说法是对还是错??
  • 谁能从android reference for Service中解释一下这个语句

    Service不是线程。它本身并不是在主线程之外完成工作的一种手段(以避免应用程序不响应错误)。

  • 如果服务在UI线程中运行,那么它不适合繁重的工作。真/假? ?如果没有活动正在运行,那么哪个线程服务将运行?
  • 如果上述说法是正确的?那么如果我在服务和活动中声明Handler会发生什么??因为一个线程只有一个Handler实例。
如果问题太新手,请原谅我。

上面的陈述是真的还是假的?

在Java中,任何地方都没有对象在线程中"运行"。方法在线程上运行。

因此,更准确的说法是Service上的生命周期方法——onCreate()onStartCommand()onBind()onDestroy()——在主应用程序线程上调用。

谁能从android reference for Service中解释一下这个语句

我不知道如何解释得比写的好得多。虽然Service 可以管理后台线程,但Service本身不是 Thread

如果服务在UI线程中运行,那么它不适合繁重的工作

在Java中,任何地方都没有对象在线程中"运行"。方法在线程上运行。

因此,更准确的说法是,您不应该在由上述生命周期方法直接触发的工作上花费太多时间。

如果没有活动正在运行,那么哪个线程服务将运行?

在Java中,任何地方都没有对象在线程中"运行"。方法在线程上运行。

前面提到的生命周期方法在主应用线程上被调用,不管前台是否有活动,甚至活动是否存在。

那么如果我在服务和活动中声明Handler会发生什么?

您将有一个Handler的实例。

因为一个线程有一个Handler

实例

Handler的默认行为是将自己绑定到主应用程序线程,无论您是在Activity还是Service中创建Handler

来自官方文档:

一个服务运行在它的宿主进程——service的主线程中不创建自己的线程,不运行在一个单独的进程(除非您另有说明)。这意味着,如果你的服务是要执行任何CPU密集型工作或阻塞操作(例如MP3)类中创建一个新线程服务来做这项工作。通过使用单独的线程,您将减少应用程序不响应(ANR)错误的风险应用程序的主线程可以专门用于用户交互与你的活动。

相关内容

  • 没有找到相关文章

最新更新