生产消费者模式与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<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进行处理,利用队列嘛,先进先出,帮我们管理消息。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容