Android中的传感器采样服务还是Asynctask?

时间:2012-10-28 16:47:48

标签: android android-service android-sensors

我将从各种传感器获取数据,如加速度计,陀螺仪,麦克风和GPS。 感应动作不应该是连续的,而是应该根据各种策略(例如省电)定期安排单个短的采样间隔。每个传感器采样动作持续几秒钟,比如5秒。 我会为每个传感器实现一个“客户端”,在必要时用于监听传感器数据,以及一个控制客户端执行的“控制器”,但我不确定如何实现这一点。

为每个客户实现服务是否正确?或者更好的是简单的AsyncTask或Handler?

如果每个客户端负责单个感知操作,在单个onStartService()中执行,或者onStartService()操作是否启用定期的采样操作,则更好? 帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

这听起来像Service的任务,由Alarm以(常规)预定时间间隔触发。

AsyncTask通常是在用户完成一些交互并且系统应该执行“长时间运行”操作(如网络i / o)之后启动的,否则会阻止UI。

请注意,很有可能同时触发AsyncTask之类的服务 - 请查看IntentService

答案 1 :(得分:2)

我建议您在这里查看我对类似问题的回答:Service v/s AsyncTask

就个人而言,我会使用一个简单的Handler来发布一个以特定时间间隔运行的任务。

示例:

private Handler mHandler = new Handler();

private void startTimer(Runnable Task, long delay) {  
    mHandler.removeCallbacks(Task);       
    mHandler.postDelayed(Task, delay);    
}

private void stopTimer(Runnable Task) {  
    mHandler.removeCallbacks(Task);       
}

private Runnable registerListeners = new Runnable() {
    public void run() {
        startTimer(registerListeners, 10*60*1000); //register to run again in 10 minutes
        startTimer(unregisterListeners, 5*1000); //to unregister in 5 seconds 
        //here register your listeners
    }
};

private Runnable unregisterListeners = new Runnable() {
    public void run() {
        //here unregister your listeners
    }
};

当您想要开始收听过程时:

//To start you listeners
startTimer(registerListeners, 0);

当你想停止每一次时:

//To stop registering/unregistering listeners
stopTimer(registerListeners);

注意:如果您在监听器中执行长时间运行的代码,那么您应该查看我上面给出的链接中的答案。

问候。

答案 2 :(得分:0)