• Android 子线程无法刷新UI界面


    问题:在Android开发中,子线程无法直接更改UI界面视图的刷新

    这个时候 Handler 起到了至关重要的作用.

    简单来说 , Handler就是用来传递消息的.

    Handler可以当成子线程与主线程的消息传送的纽带。

    在安卓开发中,在子线程中无法刷新UI,是因为UI在子线程中刷新的话,是不安全的,如 多个线程刷新UI,会造成UI更新冲突,这样是不安全的。

    所以,Handler的作用就来了,子线程可以通过Handler来将UI更新操作切换到主线程中执行. 话不多说 上代码:

    //这里需要实现 View.OnClickListener 接口 
    public class Test extends AppCompatActivity implements View.OnClickListener {    
    
            TextView textView;
    
            Thread myThread;
            
            Button buttonStart
             
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    
                    //获取文本视图
                    textView = findViewById(R.id.textView);
                    
                    //创建线程
                    myThread = new TimeThread();
                    
                    //获取开始按钮
                    buttonStart = findViewById(R.id.but_start);
                    
                    //开始按钮单击事件
                    buttonStart.setOnClickListener(this);
       
            }
             //重写onClick方法
             @Override
             public void onClick(View v) {
                     //判断当前按的控件
                     switch (v.getId()) {
                           case R.id.but_start:
                                  //开启线程
                                  myThread.start(); 
                                  break;
                           default:
                                  break;
                     }
             }
             
             
    }
    
    
    public class TimeThread extends Thread {
             //重写run方法
            @Override
            public void run() {
                super.run();
                //一直循环
                while (true) {
                    try {
                        //每秒执行一次
                        Thread.sleep(1000);
                        Message msg = new Message();
                // msg.what
    = 1; //获取当前系统时间 Date date= new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); String now= dateFormat.format(date);
                //把时间放入Message msg.obj
    = now ; //由Message传递给Handler 处理 myHandler.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); break; } } } } private Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: //更新文本框里的值 textView.setText((String)msg.obj); break; default: break; } } };
  • 相关阅读:
    【Python学习】读取Excel文件,并写入Excel
    异步编程
    LINQ入门
    [Leetcode Weekly Contest]207
    [Leetcode Weekly Contest]203
    VsCode插件,自动生成注释koroFileHeader
    vue样式穿透 ::v-deep的具体使用
    springcloud,springboot,springcloud-alibaba 之间版本关系
    sharding-sphere 单库分表实例
    CDN动态加速技术
  • 原文地址:https://www.cnblogs.com/bieyaoxiguan/p/11493740.html
Copyright © 2020-2023  润新知