Processor类需要有两个功能,一个是返回当前的地理信息,另一个功能是对信息进行处理加工后返回信息。所以,我们提供一个IProcess接口
public interface IProcessor {
void onGpsChanged(GpsTracker.GpsEntity gpsEntity);
void onSensorChanged(SensorTracker.SensorEntity sensorEntity);
void close();
void registerTripUpdateListener(TripManager.OnTripUpdateListener listener);
void unregisterTripUpdateListener(TripManager.OnTripUpdateListener listener);
}
我们在TripManager中申明IProcessor,在TripTracker中回调数据。数据最终需要回调给外层的,这个接口不能在TripManager中,需要在Processor中进行处理。
public class Processor implements IProcessor {
private ArrayList<TripManager.OnTripUpdateListener> listeners = new ArrayList<>();
@Override
public void onGpsChanged(GpsTracker.GpsEntity gpsEntity) {
}
@Override
public void onSensorChanged(SensorTracker.SensorEntity sensorEntity) {
}
@Override
public void close() {
//flush
//
}
@Override
public void registerTripUpdateListener(TripManager.OnTripUpdateListener listener) {
this.listeners.add(listener);
}
@Override
public void unregisterTripUpdateListener(TripManager.OnTripUpdateListener listener) {
this.listeners.remove(listener);
}
}
HandlerThread handlerThread = new HandlerThread("processor");
handler = new Handler(handlerThread.getLooper()) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
mProcessor.onGpsChanged((GpsTracker.GpsEntity) msg.obj);
}
};
为什么我们要用这里要用Handler?
- 数据的生产和消费需要一个过程
- 生产者只负责生产数据,不管消费,和数据的消费没有关系
- Processor和Location产生的数据进行解耦,可以写一个中间类,这里可以利用线程的生产消费者模式处理,不过我们没有必要自己写一个,我们可以利用Android中的Handler进行处理,利用队列嘛,先进先出,帮我们管理消息。