【问题标题】:Android Intent Service implementing SensorEventListener实现 SensorEventListener 的 Android Intent 服务
【发布时间】:2013-07-05 01:43:40
【问题描述】:

我对 Android 中的 IntentService 有疑问。我将自己的服务定义如下:

public class ABC extends IntentService implements SensorEventListener {

  @Override
  protected void onHandleIntent(Intent intent) { }

  @Override
  public void onSensorChanged(SensorEvent event) { }
}

现在,如果我从其他活动启动服务,则会调用 onHandleIntent()。文档说它启动了一个工作线程来处理请求。但是,当调用onSensorChanged() 方法时,哪个线程将执行onSensorChanged() 方法中定义的代码。会是工作线程还是主应用线程???

【问题讨论】:

    标签: java android performance android-intent


    【解决方案1】:

    根据IntentService source code,IntentService 在不再有任何消息时会自行停止(stopSelf 调用)。因此,如果您想要一个长期运行的Service(我认为这适合您的SensorEventListener),那么您应该使用常规的Service

    【讨论】:

    • 是的,我明白这一点。我想了解的是 IntentService 在上述两种情况下如何为请求提供服务。 onHandleIntent() 和 onSensorChanged()。 onHandleIntent() 启动一个工作线程并在完成时自行停止。 onSensorChanged() 呢???实际调用哪个线程来处理此请求?
    • @pree - 在工作线程处理完所有消息后,它会停止整个 IntentService,这意味着没有任何东西可以接收到您的传感器更改事件。如果您使用的是常规的Service(不会停止),那么onSensorChanged(),就像Service 中的每个方法一样,将在主线程上调用。
    • 是的,我明白了。它将在主线程上调用。另外,我做了一个小实验,并使用 startService() 调用了 onHandleInvoked() 方法。它在完成请求后停止。然后我触摸传感器调用 onSensorChanged() 方法,并在主线程上调用它。如何?如果完成第一个请求后整个服务停止了,它怎么能检测到传感器的变化???
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多