【发布时间】:2011-04-07 15:12:57
【问题描述】:
我目前正在我的应用程序中构建一些运动检测功能。我还没有找到一种在不让手机一直保持清醒的情况下持续监控加速度计的方法。为了克服这个问题,我目前有一个实现 SensorEventListener 的服务。我可以间隔启动这项服务(使用警报管理器),从设备加速度计获取读数,确定设备是否在移动,然后关闭服务。一般情况如下:
public class MyService extends Service implements SensorEventListener {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
/* Register this SensorEventListener with Android sensor service */
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
/* Unregister SensorEventListener */
}
/* SensorEventListener Implementation ************************/
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
/* Receives callback when sensor values change */
@Override
public void onSensorChanged(SensorEvent event) {
/* Determine if moving & then call stopSelf() to shut service down */
}
}
但是,我还有一个问题,因为我的应用程序有第二个服务,它在不同的时间表上被调用。据我所知,这两个服务都将在同一个线程中运行,这不好,因为它们可能会发生冲突。
我需要知道是否有一种安全的方法可以在同一个应用程序中同时运行多个服务。我考虑过使用 IntentService 而不是标准的 Service 类。我知道这些实现了自己的工作线程来处理调用。问题是我不知道如何从 IntentService 中实现 SensorEventListener 所需的异步回调类型。换句话说,我不能保证像 onSensorChanged 这样的方法会在 IntentService 完成工作并关闭之前收到回调。
非常感谢任何有关此问题的解决方法的建议。
【问题讨论】:
-
您应该将 Commons 的答案标记为正确答案。 :)
标签: java android multithreading service