ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android——跨线程更新UI,Message,Handler

2021-08-14 07:01:10  阅读:174  来源: 互联网

标签:what Handler 线程 返回值 UI Message message


介绍

  Android中UI组件只能在主线程进行更新。

  因此,从其他线程无法操作UI组件更新网络数据。而 Handler ,Message,就是用于线程直接传递消息

  

  Message:在handler和子线程之间传递数据(handler在主线程)

  Handler:发送Message,处理Message。 使用Handler可将子线程的数据通过Message发送到主线程中,再通过handleMessage()进行处理。

属性

  Message

    arg1:int变量,存储数据

    arg2:int变量,存储数据

    what:int变量,区别消息类型

    object:Object类,存储对象

    

方法

  ( Message )

  Message  obtain();

    参数:无

    返回值:Meesage对象

    返回值意义:生成Message对象

    作用:可获取一个Message对象

  

  ( Handler )

  boolean sendMessage( Message message )

    参数:

      Message message:消息对象

    返回值:boolean

    返回值意义:是否发送成功

    作用:发送消息对象到主线程中由handler处理

    

  void handleMessage( Message message )

    参数:

      Message message:回调的消息对象

    返回值:无

    返回值意义:wu

    作用:处理回调的消息对象。

  

使用

  1. 生成内部类 MHandler 继承 Handler ,重写 handleMessage(Message message) 方法。根据message.what分类处理

  2.在子线程中生成Message对象,记录标识what ,携带数据arg1

  3. 通过handler.sendMessage(Message message) 发送数据

  

  

 1 

  
  
public class SecondActivity extends AppCompatActivity {
    private ProgressBar progressBar;
    private MHandler mHandler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        mHandler = new MHandler();
        progressBar = this.findViewById(R.id.pb);

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                int count = 0;
                while ( count < 100){
                    count++;
                    Message message = Message.obtain();
                    message.what = 10;
                    message.arg1 = count;
                    mHandler.sendMessage(message);
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        thread.start();
    }
    class MHandler extends Handler{
        @Override
        public void handleMessage(@NonNull Message msg) {
            switch ( msg.what ){
                case 10:
                    progressBar.setProgress(msg.arg1);
                    break;
                case 20:
                    break;
            }
        }
    }
}

 



 

 

    

    

标签:what,Handler,线程,返回值,UI,Message,message
来源: https://www.cnblogs.com/remix777/p/15139763.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有