关于子线程更新UI

大家都了解的子线程不能更新UI,所以普通青年比如我,遇到耗时操作用到线程时,不得不立马想到了用handler传递来解决UI更细的问题。

普通青年的做法:

方案:使用Thread+handler方式,handler传递信息实现Ui的更新

new Thread( new Runnable() {     
    public void run() {     
         Message message = new Message();      
            message.what = 1;      
            handler.sendMessage(message);        
     }            
}).start();

Handler myHandler = new Handler() {  
          public void handleMessage(Message msg) {   
               switch (msg.what) {   
                    case 1:   
                         myBounceView.invalidate();  
                         break;   
               }   
               super.handleMessage(msg);   
          }   
     };
逼格稍高的普通青年做法:

使用java.util.Timerjava.util.TimerTask, android.os.Handler组合,实现定时的更新UI

private Handler handler = new Handler();  
  
    private Runnable myRunnable= new Runnable() {    
        public void run() {  
             
            if (run) {  
                handler.postDelayed(this, 1000);  
                count++;  
            }  
            tvCounter.setText("Count: " + count);  

        }  
    };
或者handler.postDelayed(runable,1000);

写道这里有必要提一下,handler.postDelay虽然看起来是子线程的形式,但其实质上不是工作在子线程,只是以子线程的形式运行罢了,这也同样呼应了开头说的那句话:UI更新必须在主线程进行。

暂且叫做文艺青年的更新UI做法:

runOnUiThread
new Thread(new Runnable() {

@Override
public void run() {
final String avatarUrl = ((DemoHXSDKHelper)HXSDKHelper.getInstance()).getUserProfileManager().uploadUserAvatar(data);
runOnUiThread(new Runnable() {
@Override
public void run() {
dialog.dismiss();
if (avatarUrl != null) {
               Toast.makeText(UserProfileActivity.this, getString(com.boyuyun.chatui.R.string.toast_updatephoto_success),
Toast.LENGTH_SHORT).show();
} else {
               Toast.makeText(UserProfileActivity.this, getString(com.boyuyun.chatui.R.string.toast_updatephoto_fail),
Toast.LENGTH_SHORT).show();
}

         }
      });

}
}).start();

这是使用demo里的一段代码,也就是他让我开始关注runOnUIThread,该方法是activity的方法,使用是注意指明context。以子线程的形式运行在主线程,从而实现UI更新


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值