2017.12.18 Android开发之消息队列(实现子线程修改UI组件)

Posted 小春熙子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017.12.18 Android开发之消息队列(实现子线程修改UI组件)相关的知识,希望对你有一定的参考价值。

 

1.界面布局,以及组件初始化:

组件初始化:

 private Button button;
    private Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button);
        button.setOnClickListener(new ButtonListener());
        handler=new FirstHandler();
    }

 

2.消息队列的使用:

    class ButtonListener implements View.OnClickListener{  //设置监听器,使得每点一次按钮生成一次消息
        @Override
        public void onClick(View view) {
            Message msg=handler.obtainMessage();
            msg.what=8;                    //msg的其中一个参数,可以设置很多msg的参数
            handler.sendMessage(msg);     //把消息扔出去
        }
    }

    class FirstHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {     //处理消息,传一个消息体进来,理解为一个对象,可以是字符串,int型之类的
            int what=msg.what;
            System.out.println("数据what是:"+what);


            super.handleMessage(msg);
        }
    }

 

3.通过消息队列来修改主线程的文字:

 class MyHandler extends Handler{
    @Override
    public void handleMessage(Message msg) {
        System.out.println("这是来自MyHandler的信息:"+Thread.currentThread().getName());
        String s=(String)msg.obj;
        textview.setText(s);
        super.handleMessage(msg);
    }
}
    class ButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            Thread thread=new NetWorkThread();
            thread.start();
        }
    }

    class NetWorkThread extends Thread{
        @Override
        public void run() {
            System.out.println("来自NetWorkThread的信息:"+Thread.currentThread().getName());
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            String s="有理想的爱国青年";
            Message msg=handler.obtainMessage();
            msg.obj=s;
            handler.sendMessage(msg);

            super.run();
        }
    }

 

以上是关于2017.12.18 Android开发之消息队列(实现子线程修改UI组件)的主要内容,如果未能解决你的问题,请参考以下文章

Android中Handle详解

分布式开发之消息队列

Android多线程编程之Handler篇(消息机制)

Android多线程编程之Handler篇(消息机制)

Android多线程编程之Handler篇(消息机制)

Java开发 - 消息队列之RabbitMQ初体验