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);  
            }
    }

    运行打印:

     

  • 相关阅读:
    Attributes in C#
    asp.net C# 时间格式大全
    UVA 10518 How Many Calls?
    UVA 10303 How Many Trees?
    UVA 991 Safe Salutations
    UVA 10862 Connect the Cable Wires
    UVA 10417 Gift Exchanging
    UVA 10229 Modular Fibonacci
    UVA 10079 Pizza Cutting
    UVA 10334 Ray Through Glasses
  • 原文地址:https://www.cnblogs.com/lifexy/p/12304228.html
Copyright © 2011-2022 走看看