Android 子线程更新UI

本文介绍了几种在Android应用中更新用户界面(UI)的有效方法。包括使用Handler进行消息传递来更新UI,利用runOnUiThread()直接在主线程更新UI,以及通过View.post(Runnable r)简化UI更新流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Handler

Handler mHandler = new Handler() {  

        @Override  
        public void handleMessage(Message msg) {  
            super.handleMessage(msg);  
            switch (msg.what) {  
            case 0:  
                //完成主界面更新,拿到数据  
                String data = (String)msg.obj;  

                updateWeather();  
                textView.setText(data);  
                break;  
            default:  
                break;  
            }  
        }  

    };  

子线程发消息,通知Handler完成UI更新

private void updateWeather() {  


        new Thread(new Runnable(){  

            @Override  
            public void run() {  
                //耗时操作,完成之后发送消息给Handler,完成UI更新;  
                mHandler.sendEmptyMessage(0);  

                //需要数据传递,用下面方法;  
                Message msg =new Message();  
                msg.obj = "数据";//可以是基本类型,可以是对象,可以是List、map等;  
                mHandler.sendMessage(msg);  
            }  

        }).start();  

    }  

在子线程中通过runOnUiThread()方法更新UI

new Thread() {  
            public void run() {  
                //这儿是耗时操作,完成之后更新UI;  
                runOnUiThread(new Runnable(){  

                    @Override  
                    public void run() {  
                        //更新UI  
                        imageView.setImageBitmap(bitmap);  
                    }  

                });  
            }  
        }.start();  

在非上下文类中(Activity),可以通过传递上下文实现调用

Activity activity = (Activity) imageView.getContext();  
                activity.runOnUiThread(new Runnable() {  

                    @Override  
                    public void run() {  
                        imageView.setImageBitmap(bitmap);  
                    }  
                }); 

View.post(Runnable r)
这种方法更简单,但需要传递要更新的View过去

imageView.post(new Runnable(){  

                    @Override  
                    public void run() {  
                        imageView.setImageBitmap(bitmap);  
                    }  

                }); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值