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

運行打印:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM