生产消费者模式与Handler

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 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进行处理,利用队列嘛,先进先出,帮我们管理消息。

你可能感兴趣的:(生产消费者模式与Handler)