• 线程通信(2)


    消息分发
         当Message对象被发送到Handler。并尝试被处理时。Handler会对消息进行分发,即决定由谁处理消息。
        在消息机制中,能够有下面3种处理消息的方式:
            【高优先级】在创建Message对象时,调用Message类的静态方法public static Message obtain(Handler h,Runnable callback),

    指定callback參数,则由callback处理消息。

    public void doSendMessage(View view){
    		Message msg;
    		Runnable callback = new Runnable(){
    			@Override
    			public void run() {
                    System.out.println("高优先级");				
    			}
    		};
    		msg = Message.obtain(new Handler(),callback);
    		msg.sendToTarget();
    	}

    【中优先级】在创建Handler对象时。调用public Handler(Callback callback)构造方法,指定callback,将由Handler.Callback接口中
    定义的public boolean handleMessage(Message msg)方法处理消息。


         private Handler handler;
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		handler = new Handler(new InnerHandlerCallback());
    	}
    	
    	private class InnerHandlerCallback implements Handler.Callback{
    
    		@Override
    		public boolean handleMessage(Message msg) {
                System.out.println("中优先级");			
    			return false;
    		}
    		
    	}
    	public void doSendMessage(View view){
    		Message msg;
    		Runnable callback = new Runnable(){
    			@Override
    			public void run() {
                    System.out.println("高优先级");				
    			}
    		};
    		msg = Message.obtain(handler);
    		msg.sendToTarget();
    	}

    【低优先级】自己定义类继承Handler类,创建自己定义的Handler对象。并在自己定义类中
    重写public void handleMessage(Message msg)方法,由重写的方法处理消息。


    线程通信模型
              因为向目标线程发送消息的线程可能比較多,为了确保目标线程
     能收到这些消息。并逐一处理。在消息机制中,存在4种角色:
           Message:消息的载体
    Handler:发送消息、处理消息
    MessageQueue:消息队列
    Looper:消息队列的管理者
         Handler用于运行消息的发出和处理
         Handler关联一个独立的线程及消息队列。即Handler在哪个线程创建。则绑定到哪个
         线程的消息队列。
         MessageQueue是Message的容器,它是一个先进先出、后进后出的队列;
         不论什么Message在被发出后,都会被先放到MessageQueue中。然后逐一的发送给目标。
         Looper是MessageQueue的管理者
         当Message被发出后。由Looper关联的MessageQueue.IdleHandler将其加入到MessageQueue中
         Looper在工作时,会循环读取MessageQueue,然后实现消息的发送
         MessageQueue是由Looper实现管理,英雌,开发者无需对它进行处理
         Handler的创建线程决定了他所在的线程。则处理相应线程中收到的消息
         每一个线程都能够有独立的Looper。由各个Looper管理各个线程的消息队列
         Looper必须调用prepare()系列方法进行初始化,然后在调用loop()方法才会開始工作
         每一个Handler在初始化之前。相应的线程中必须有匹配的Looepr,而主线程默认即存在已经启动的Looper

  • 相关阅读:
    C++之流与文件
    C++之检测文件结尾
    统信UOS
    统信UOS
    统信UOS
    八、【Docker笔记】使用Dockerfile创建镜像
    七、【Docker笔记】Docker中网络基础配置
    六、【Docker笔记】Docker数据管理
    五、【Docker笔记】Dockers仓库
    四、【Docker笔记】Docker容器
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7189987.html
Copyright © 2020-2023  润新知