zoukankan      html  css  js  c++  java
  • 关于子线程更新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更新


  • 相关阅读:
    一分钟明确 VS manifest 原理
    关于“鸡脚神”的看法
    Android中Context具体解释 ---- 你所不知道的Context
    解决android3.0版本号以上应用接收不到开机广播问题
    什么是流利语法Fluent Syntax
    vi 命令 使用方法
    TinyXml高速入门(一)
    reactor设计模式
    ActivityGroup+LinearLayout实现iphone风格的底部tab菜单
    使用ActivityGroup来切换Activity和Layout
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7262527.html
Copyright © 2011-2022 走看看