运行多个服务

use*_*210 8 java service multithreading android

我目前正在为我的应用程序构建一些移动检测功能.我没有找到一种连续监控加速度计的方法,而不是一直保持手机清醒.为了克服这个问题,我目前有一个实现SensorEventListener的服务.我可以间隔启动此服务(使用警报管理器),从设备的acclerometer获取读数,确定设备是否正在移动,然后关闭服务.通常,这显示如下:

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 */
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,我还有一个问题,即我的应用程序有第二个服务,它是根据不同的时间表调用的.据我所知,这两个服务都将在同一个线程中运行,因为它们可能会发生冲突.

我需要知道是否有一种安全的方法可以在同一个应用程序中同时运行多个服务.我考虑过使用IntentService而不是标准的Service类.我知道这些实现了自己的工作线程来处理调用.问题在于我不知道如何在IntentService中实现SensorEventListener所需的异步回调类型.换句话说,我无法保证像onSensorChanged这样的方法会在IntentService完成其工作并关闭之前收到回调.

对此问题的解决方法的任何建议都非常感谢.

Com*_*are 8

因为他们可能发生冲突

怎么样?

我需要知道是否有一种安全的方法可以在同一个应用程序中同时运行多个服务

在同一个应用程序中同时拥有多个服务没有内在问题,只不过在同一个应用程序中有多个活动存在固有问题.

对此问题的解决方法的任何建议都非常感谢.

你没有表现出问题.

  • @advantej:"第一个触发的服务将运行,而下一个服务将被放入主线程的消息队列中,并将在以后被占用" - 它将更多地基于生命周期逐个方法.可以使用`onCreate()`和`onStartCommand()`调用服务#1,然后使用`onCreate()`调用服务#2,然后服务#1可以调用`onDestroy()`等. (2认同)