Handler与Message

来源:互联网 发布:淘宝刷单 php源码 编辑:程序博客网 时间:2024/05/13 12:26

Handler与Message

 private Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (msg.arg1 == 0) {                mTv.setText("收到消息");            }        }    };    public void myClick(View view) {        new Thread(new Runnable() {            @Override            public void run() {                try {                    Thread.sleep(6000);                    Message msg = new Message();                    // 给消息携带信息                    msg.arg1 = 0;                    // 使用Handler发送消息通知主线程更新                    handler.sendMessage(msg);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }).start();    }

单线程消息处理队列

生产者消费者模式
功能
一个线程处理所有的任务,队列中保存待处理的任务

例子: 单任务的下载
Main线程

单线程消息队列需要的角色
线程 处理消息 Thread
消息 封装信息 Message
消息队列 按顺序保存消息 MessageQueue
处理者 线程间发送消息 Handler
轮询消息队列 从消息队列中取消息给线程执行 Looper

public class MainActivity extends AppCompatActivity {    private Handler mHandler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initMessageQueue();    }    public void myClick(View view) {        //Message msg = new Message();        // 也可以从消息池中获取消息对象        Message msg = mHandler.obtainMessage();        msg.arg1 = new Random().nextInt(5) + 1;        // 发送消息        mHandler.sendMessage(msg);    }    private void initMessageQueue() {        //开启线程        new LooperThread().start();    }    class LooperThread extends Thread {        @Override        public void run() {            super.run();            // 创建Looper与MessageQueue            Looper.prepare();            // Handler执行在哪条线程取决于构造方法中的参数            // 如果什么都没传默认工作在创建Handler的那条线程            // Looper.myLooper()可以获得当前Looper的对象            mHandler = new Handler() {                @Override                public void handleMessage(Message msg) {                    super.handleMessage(msg);                    Log.e("收到消息=", msg.arg1 + "");                }            };            // 开始轮询            Looper.loop();        }    }}

这里写图片描述

0 0
原创粉丝点击