zoukankan      html  css  js  c++  java
  • 14.Android-使用sendMessage线程之间通信

    1.Handler介绍

    Handler 是一个消息分发对象。handler是Android给我们提供用来更新UI的一套机制,也是一套消息处理机制,通过它可以实现在不同线程之间传递消息

    本章Handler类要用到的方法有:

    void handleMessage(Message msg);    //需要重写的方法,用来处理接收的消息,只有当接收到发送者发来的消息,才会回调该方法
    Message obtainMessage();           //获取一个消息对象
    boolean sendMessage(Message msg); //发送消息对象,发送成功的话,就会回调handleMessage()方法

    2.MainActivity.java如下所示:

    package com.example.tcpdemo;
    
    import java.io.IOException;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.view.Menu;
    
    public class MainActivity extends Activity {
    
        MyThread mt;
        
        //定义一个handler
        public Handler mHandler = new Handler() {
            public void handleMessage(Message msg) {
                //打印发送者发来的消息
                System.out.println("main what:"+msg.what);
                System.out.println("main obj:"+msg.obj.toString());
                System.out.println("main arg1:"+msg.arg1);
                
            };
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            mt = new MyThread();
            mt.setHandler(mHandler);    //设置handler
            mt.start();    //启动线程
            
           
        }
    }

    3.MyThread.java如下所示:

    package com.example.tcpdemo;
    
    
    import android.os.Handler;
    import android.os.Message;
    
    public class MyThread extends Thread {
        
            
            public Handler mHandler=null;
            
            //获取另一个线程的Handler
            public void setHandler( Handler handler){
                mHandler = handler;
            }
            
            public void run(){
               
                 try { //让线程睡眠3s。
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                 
                 Message msg = mHandler.obtainMessage(); 
                 //设置发送的内容
                 msg.arg1 = 1;  
                 msg.what = 3;  
                 msg.obj = "this is MyThread"; 
                 mHandler.sendMessage(msg);  
            }
    }

    运行打印:

     

  • 相关阅读:
    PID204特种部队
    概率论,简要数学期望(转载)
    codevs1258 关路灯(☆区间dp)
    codevs3327选择数字(单调队列优化)
    codevs3002石子归并3(四边形不等式优化dp)
    codevs1154能量项链(环形dp,区间dp)
    codevs3304水果姐逛街(线段数)
    codevs3162抄书问题(划分型dp)
    浅谈一类积性函数的前缀和(转载)
    组合数取模(转载)
  • 原文地址:https://www.cnblogs.com/lifexy/p/12304228.html
Copyright © 2011-2022 走看看