• 四种更新UI的方法


    笔记:

     
    // 使用handler.post(Runnable)更新UI
        public void updateUI_Fun1() {
            new Thread() {
                public void run() {
                    Handler handler = new Handler();
                    handler.post(new Runnable() {
    
                        @Override
                        public void run() {
                            textView.setText("this is update content");
                        }
                    });
                };
            }.start();
        }
    
        // 使用handler发送消息更新UI
        public void updateUI_Fun2() {
            Handler handler = new Handler(new Callback() {
    
                @Override
                public boolean handleMessage(Message msg) {
                    // 对handler发送消息的预处理,返回falst则执行下面的handlerMessage() true则不执行
    
                    return false;
                }
            }) {
                public void handleMessage(Message msg) {
                    textView.setText("this is update content");
                };
            };
        }
    
        // 使用UI线程更新UI
        public void updataUI_Fun3() {
            runOnUiThread(new Runnable() {
    
                @Override
                public void run() {
                    textView.setText("updata ui content");
                }
            });
        }
    
        // 使用View.post( Runnable)更新UI
        public void updateUI_Fun4() {
            textView.post(new Runnable() {
    
                @Override
                public void run() {
                    textView.setText("this is update context");
    
                }
            });
        }
     

    使用子线程自带的Looper更新UI:

    代码笔记:

     
    private Handler handler2;
        private HandlerThread thread;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
    
            myHandlerThread = (Button) findViewById(R.id.MyThreadHandler);
            handlerThread = (Button) findViewById(R.id.HandlerThread);
            
            //利用HandlerThread线程执行耗时操作,可以简单代替AsyncTask等。主线程给子线程发送消息
            handlerThread.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    thread=new HandlerThread("aaaa");
                    thread.start();
                    handler2=new Handler(thread.getLooper()){
                        @Override
                        public void handleMessage(Message msg) {
                            Toast.makeText(SecondActivity.this,    "this is HandlerThread", Toast.LENGTH_SHORT).show();
                        }
                    };
                    handler2.sendEmptyMessage(1);
                }
            });
     
  • 相关阅读:
    jQuery Deferred和Promise的使用介绍:
    asp.net客户端IP跟踪
    jquery常用的一些方法
    前端音频流播放
    c# Http请求下载二进制流文件
    iView表格行验证问题
    【已解决】Https请求—未能创建 SSL/TLS 安全通道
    安全开发规范
    数据库设计规范
    高性能开发规范
  • 原文地址:https://www.cnblogs.com/android-blogs/p/4846148.html
Copyright © 2020-2023  润新知