安卓Handler

1.什么是Handler?
Handler是安卓SDK中处理异步消息的核心类。
Handler的作用是让子线程通过与主线程通信来更新UI界面。
2.Handler的运行机制
创建一个Handler对象,系统就把Handler对象、UI线程和UI线程的消息队列捆绑起来。
当我们在线程处理完数据后,可以通过Handler对象将消息发出。
消息将会会按顺序添加到消息队列中。
UI线程中的Looper不断从消息队列中取出消息刷新UI。
3.什么是Looper和MessaQueue?
Looper:在安卓在创建出来的普通线程是默认没有消息循环的,run方法执行完毕后,线程也结束了。如果让子线程不停的做循环工作,可以使用Looper,将普通线程变成循环线程。
MessaQueue:当创建一个Looper时,将会自动创建chuMessaQueue,一个线程中只会存在一个Looper和一个MessaQueue,当MessaQueue中有消息时,Looper将从MessaQueue取出消息。
4.什么是Message?
Message是子线程发出的消息,其中Message有4个属性。
what属性
int类型的消息码,接收方用来识别是什么消息。
arg1,arg2属性
int类型,仅仅只能传递整型数字。
obj属性
object类型,用来传输String和人也类型时使用。
send’To Target方法
将消息发给指定Handler对象。
5.如何使用Handler?
在UI线程中创建Handler匿名内部类对象;
在匿名内部类中重写Handler Message方法;
在UI线程中启动子线程;
在线程中获得Message对象;
将需要传递的数据赋值到Message对象中;
通过handler对象的sendMessage方法发送消息到消息队列中;
在handlerMessage方法中的消息。
6.倒计时案例
主要是先创建handler,在发布消息,最后捕获消息。

public class HandlerActivity extends AppCompatActivity {
    private EditText zbtv1;
    private TextView zztv1;
    private Button ksbtn1;
    private int time;

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            zztv1.setText(msg.what + "");
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_handler);
        BindId();
        ksbtn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                time = Integer.parseInt(zbtv1.getText().toString());//将字符串转换成整形
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        for (int i = time; i > 0; i--)
                        {
                            //更新UI
                        Message message=handler.obtainMessage();
                        message.what=i;
                        handler.sendMessage(message);
                            //handler.sendEmptyMessage(i);
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }).start();
            }
        });
    }

    private void BindId() {
        zbtv1 = findViewById(R.id.zbtv);
        zztv1 = findViewById(R.id.zztv);
        ksbtn1 = findViewById(R.id.ksbtn);
    }
}

产生效果如下

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值