2

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

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

如果每个客户端负责一个单一的传感动作,在单个 onStartService() 中执行,或者如果 onStartService() 动作启用一个周期性的采样动作会更好?帮助将不胜感激。

4

3 回答 3

2

这听起来像是 a 的任务Service,由Alarms 在(定期)预定时间间隔触发。

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

请注意,也很有可能触发类似 an AsyncTask-have a look at的服务IntentService

于 2012-10-28T16:50:54.807 回答
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);

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

问候。

于 2012-10-28T17:43:09.227 回答
0

来自 android 开发者网站的最佳实践

访问和使用传感器的最佳实践

后台作业的最佳实践

于 2013-12-23T08:45:53.493 回答