Handler的基本应用

1.    handler用来更新UI,因为只能在UI线程里更新UI

2.    handler是Android里的一种消息处理机制,可以发送和处理消息,也是一种更新UI的机制,最根本的是为了解决多线程并发的问题

3.    handler更新UI的方法,使用post。

package com.example.kirito.myapplication;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

/**
 * Created by kirito on 2016.10.12.
 */

public class TestHandler extends Activity {
    private TextView tv;
    private Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testhandler);

        tv = (TextView) findViewById(R.id.tv_handler);

        new Thread(new Runnable() {
            @Override
            public void run() {
                //使用post在Thread里更新UI(TextView)
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        tv.setText("update UI");
                    }
                });
            }
        }).start();
    }
}

4.使用handler.postDelay,实现图片的轮询切换。

package com.example.kirito.myapplication;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Created by kirito on 2016.10.12.
 */

public class TestHandler extends Activity {
    private TextView tv;
    private Handler Myhandler = new Handler();
    private MyRunnable runnable = new MyRunnable();
    private ImageView iv;
    private int index = 0;

    private int images[] = {R.drawable.a,R.drawable.b,R.drawable.check};

    /**
     * 使用MyRunnable来轮询切换图片
     */
    private class MyRunnable implements Runnable{
        @Override
        public void run() {
            index++;
            index %= 3;
            iv.setImageResource(images[index]);
            //postDelayed是关键
            Myhandler.postDelayed(runnable,1000);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testhandler);

        iv = (ImageView) findViewById(R.id.iv_handler);
        //启动MyHandler
        Myhandler.postDelayed(runnable,1000);
    }
}

5.使用handler的sendMessage方法来更新UI

package com.example.kirito.myapplication;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Created by kirito on 2016.10.12.
 */

public class TestHandler extends Activity {
    private TextView tv;
    //使用handler的handleMessage更新UI
    private Handler Myhandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            tv.setText(msg.arg1 + "");
        }
    };
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testhandler);
        tv = (TextView) findViewById(R.id.tv_handler);
        new Thread(){
            @Override
            public void run() {
                super.run();
                Message msg = new Message();//使用Message的Object参数可以传递更多信息

//msg的生成可以使用handler的obtainMessage方法 

msg.arg1 = 88; //handler发送消息 Myhandler.sendMessage(msg); } }.start(); }}


6.
//移除运行的Runnable
handler.removeCallbacks(runnable);


7.Handler添加CallBack拦截消息的传送
package com.example.kirito.myapplication;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Created by kirito on 2016.10.12.
 */

public class TestHandler extends Activity {
    private TextView tv;
    //使用handler的handleMessage更新UI
    private Handler Myhandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            tv.setText(msg.arg1);
        }
    };

    private Handler handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            Toast.makeText(getApplicationContext(),"1.1",Toast.LENGTH_SHORT).show();
            return false;//若设置为true下面的hangdleMessage方法将不会执行,消息被截获
        }
    }){
        @Override
        public void handleMessage(Message msg) {
            Toast.makeText(getApplicationContext(),"1.2",Toast.LENGTH_SHORT).show();
        }
    };
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testhandler);
        
        
        //发送一个空消息
        handler.sendEmptyMessage(1);
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值