活动和服务是否在同一个线程中运行?

时间:2013-06-12 15:07:52

标签: android android-activity android-service

我对Handler,服务和活动的基本概念感到困惑。我在很多地方都看到过服务在UI线程中运行。关于这个陈述,我有几个问题。

  • 上述陈述是真还是假??
  • 有人可以从服务

    的Android参考解释此声明
      

    服务不是线程。它不是从主线程开始工作的一种手段(以避免应用程序无响应错误)。

  •   
  • 如果服务在UI线程中运行,那么它不适合繁重的工作。真/假??
  •   
  • 如果没有活动正在运行,那么哪个线程服务将运行?如果上述陈述是真的。
  •   
  • 如果上述陈述属实?那么如果我在服务中宣布处理程序以及活动将会发生什么?因为一个Thread有一个Handler实例。
  •   
  如果问题太过正常,请原谅我。

2 个答案:

答案 0 :(得分:5)

  

上述陈述是真还是假?

在Java中的任何位置都没有对象“运行”。 方法在线程上运行。

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

  

有人可以从Android引用服务

解释这个语句

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

  

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

在Java中的任何位置都没有对象“运行”。 方法在线程上运行。

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

  

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

在Java中的任何位置都没有对象“运行”。 方法在线程上运行。

在主应用程序线程上调用上述生命周期方法,无论前台是否存在活动,或者即使存在活动。

  

那么如果我在服务中宣布处理程序以及活动会发生什么?

您将拥有Handler的实例。

  

因为单个Thread有一个Handler实例

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

答案 1 :(得分:0)

A service runs in the main thread of its hosting process—the service does not create its own thread and does not run in a separate process (unless you specify otherwise). This means that, if your service is going to do any CPU intensive work or blocking operations (such as MP3 playback or networking), you should create a new thread within the service to do that work. By using a separate thread, you will reduce the risk of Application Not Responding (ANR) errors and the application's main thread can remain dedicated to user interaction with your activities.