安卓中关于Handler机制的浅谈

package com.example.fafa.justabouthandler;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements Handler.Callback{


    private static final int UPDATE_TEXT = 100;
    private TextView mTetx;
    private Button mChangeBt;

    private Handler handler=new Handler(this);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        mTetx = (TextView) findViewById(R.id.my_text);
        mChangeBt = (Button) findViewById(R.id.change);
        mChangeBt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {

    //  1                    mTetx.setText("bye,world");
                        Message message= new Message();
                        message.what=UPDATE_TEXT;
                        handler.sendMessageDelayed(message,5000);

                      // handler.sendEmptyMessageDelayed(UPDATE_TEXT,5000); //这个是方法二只需要一句代码简单些

                        /*当你点进sendEmptyMessageDelayed的时候你会发现
                          public final boolean sendEmptyMessageDelayed(int what, long delayMillis) {
                            Message msg = Message.obtain();
                            msg.what = what;
                            return sendMessageDelayed(msg, delayMillis);
                          }

                        ,其实这两个方法是一样一样的,一个传Message类型的msg,一个传int类型的what,传what的,最终会转为msg。
                         */
                    }
                }).start();
            }
        });
    }

    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what) {
            case UPDATE_TEXT:
                    mTetx.setText("bye,world");
                break;
        }
        return false;
    }
}
 
在上面的代码中布局中就只有一个TextView和一个Button控件 给按钮设置一个监听点击的时候开一个线
程,因为安卓是线程不安全的如果在子线程中直接像我的注释1一样直接更新UI那么程序就会crash掉,这
时候就应该像代码写的一样直接利用handler来发送消息,handlerMessage是在主线程中运行的就会接收
此消息然后就能更新UI了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值