我将从各种传感器获取数据,如加速度计,陀螺仪,麦克风和GPS。 感应动作不应该是连续的,而是应该根据各种策略(例如省电)定期安排单个短的采样间隔。每个传感器采样动作持续几秒钟,比如5秒。 我会为每个传感器实现一个“客户端”,在必要时用于监听传感器数据,以及一个控制客户端执行的“控制器”,但我不确定如何实现这一点。
为每个客户实现服务是否正确?或者更好的是简单的AsyncTask或Handler?
如果每个客户端负责单个感知操作,在单个onStartService()中执行,或者onStartService()操作是否启用定期的采样操作,则更好? 帮助将不胜感激。
答案 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)