Android——Handler机制

Handler机制是什么

        Handler机制主要应用于线程之间的通信。

        在安卓中,只有UI线程(主线程)才能更新界面。像联网这样耗时间的操作,如果把这种操作放在主线程中运行,就可能造成界面卡顿的情况,所以这种操作一般都是在WorkThread(工作线程)中执行的。如果说我的WorkThead执行完成后得到了一个数据,需要把这个数据更新到UI界面上,这个时候就需要用到Handler了。

与Handler相关的类以及Handler类的简单介绍

        Mesage

                意思是消息,是消息的载体。

public int what id标识
//可以携带简答的参数,也可以不用来携带数据
public int arg1 参数1
public int arg2 参数2
public Object object 可以用来携带复杂的数据
publc Message obtain(Handler h, int what, Object obj) 创建一个Message对象

        MessageQueue

                存储Handler发送的消息

                按Message.when排序队列的优先级

        Looper

                通过循环MessageQuene里面当前需要处理的Message,

                交给对应的Handler进行处理,处理完成,将Message对象

                缓存到消息池中,以备复用。

        Handler

Handler.sendMessage(Message message) 发送一个即时消息
Handler.sendMessageDelayed(Message message,long time) 发送一个延时消息
Handler.handlerMessage(Message msg) 处理信息,回调方法
Handler.removeMessage(int what) 删除还没有未处理的消息

Handler简单的示例

public class MainActivity extends AppCompatActivity {
    private TextView user,password;
    private Random random=new Random();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        user=findViewById(R.id.user);
        password=findViewById(R.id.passdword);
        final Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                if(msg.what==1){
                    User u= (User) msg.obj;
                    user.setText(u.getUserName());
                    password.setText(u.getPassword());
                }
            }
        };
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    Message message=Message.obtain(handler,1,new User(Make(),Make()));
                    handler.sendMessage(message);
                }
            }
        }).start();
    }
    private String Make(){
        String str="";
        for(int i=0;i<5;i++){
            str+=random.nextInt(9)+1;
        }
        return str;
    }
}

消息机制处理原理图

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值