关于android的消息队列(handler)

来源:互联网 发布:淘宝达人如何挣钱 编辑:程序博客网 时间:2024/04/27 21:07

软件开发避免不了多线程问题,线程之间的通信显得尤为重要。在android系统中采用了消息队列的方式进行线程通信,

消息队列的核心是handler!

有一篇文章可以供大家参考,以便了解消息队列到底是什么东东!

Android 的消息队列模型


下面我写了一个小例子:

AndroidThreadTestActivity.java

package com.mjb.activity;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.Toast;import com.mjb.thread.MyThread;public class AndroidThreadTestActivity extends Activity {private static Handler mianHandler=null;    public static Handler getHandler() {return mianHandler;}@Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        mianHandler=new Handler(){        //这里相当于复写了Handler的handleMessage方法,当前线程收到消息后会调用这个方法处理!        //handler在那个线程创建就属于那个线程,想要向这个线程发送消息,需要用这个handler对象!        @Override        public void handleMessage(Message msg) {        // TODO Auto-generated method stub        if(msg.what==5){        showToast();        }        if(msg.what==9){        System.out.println("9");        }        super.handleMessage(msg);        }        };        System.out.println("主线程"+Thread.currentThread().getId());        MyThread myThread=new MyThread();        Thread thread=new Thread(myThread);        thread.start();            }    public void showToast(){    Toast.makeText(this, "收到子线程消息", Toast.LENGTH_SHORT).show();        }        }


MyThread.java

package com.mjb.thread;import com.mjb.activity.AndroidThreadTestActivity;import android.os.Handler;import android.os.Message; public class MyThread  implements Runnable{ private Handler mainHandler;@Override    public void run() {//mainHandler对象来自AndroidThreadTestActivity    mainHandler=AndroidThreadTestActivity.getHandler();    Message message=new Message();    message.what=5;    mainHandler.sendMessage(message);    mainHandler.sendEmptyMessage(9);    System.out.println("子线程"+Thread.currentThread().getId());     }    }


这样就完成了一个简单的线程通信,子线程向主线程发送消息!