zoukankan      html  css  js  c++  java
  • 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();
            }
        }

  • 相关阅读:
    (教程)怎么避免拼多多比价订单行为
    Ubuntu下搭建apache2+GGI环境
    搭建k8s
    我的2021年总结
    工作三年的一些感悟
    xshell6+xftp6免安装破解版
    centos7启动docker容器时提示Error response from daemon: Unknown runtime specified dockerrunc
    解决一个C#中定时任务被阻塞问题
    工程中实际问题解决两例——基于C#
    解决一次gitlab因异常关机导致启动失败
  • 原文地址:https://www.cnblogs.com/hqutcy/p/8058231.html
Copyright © 2011-2022 走看看