学习Handler的一些用法

来源:互联网 发布:淘宝旺旺卖家版 千牛 编辑:程序博客网 时间:2024/05/17 08:13

这两天学习到handler机制,初步了解了一些关于它的用法,在这里做一些记录。

1、handler是传送消息的机制,用于在多线程中传送和接收消息。

2、handler用于ui信息的更新。类似于异步更新的效果。

下面是一个handler机制中更换图片的效果。(在布局文件中,只需要建立一个imageView就行了)

package com.example.handledemos;

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

/**
 * Handler的用法
 * 1、Handler用于发送和处理消息。
 * 2、在多线程中更新ui。
 * @author lzl
 *这里实现在Handler中图片的切换。
 */
public class MainActivity extends Activity {

    private TextView textView;
    private ImageView imageView;
    int images[] = {R.drawable.iamge1,R.drawable.image2,R.drawable.image3};
    private Handler handler = new Handler();
    private int index;
    private MyRunnerble myrunnerble = new MyRunnerble();   //这里是创建对象
    class MyRunnerble implements Runnable{

        @Override
        public void run() {  
            index++;
            index = index % 3;  
            Log.i("tag", index+"");
            handler.postDelayed(myrunnerble, 1000);   //在线程中执行,延迟时间1秒。
            imageView.setImageResource(images[index]);
        }
        
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("tag", "执行了吗?");
        imageView = (ImageView) findViewById(R.id.imageView1);
        handler.postDelayed(myrunnerble, 1000);
    }
}

2、使用Handler传送消息,并更新文本的信息。

package com.example.handledemos;

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

/**
 * Handler的用法
 * 1、Handler用于发送和处理消息。
 * 2、在多线程中更新ui。
 * @author lzl
 *这里实现在Handler中图片的切换。
 */
public class MainActivity extends Activity {

    private TextView textView;
    private ImageView imageView;
    int images[] = {R.drawable.iamge1,R.drawable.image2,R.drawable.image3};
    //使用handler传送消息,需要一个handlerMessage方法
    private Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {
//            textView.setText(msg.obj+"");
            textView.setText(msg.arg1+"-------"+msg.arg2);
        };
    };
    private int index;
    private Person person = new Person();
    class Person{
        public String name;
        public int age;
        @Override
        public String toString() {
            // TODO Auto-generated method stub
            return "name="+name+",age="+age;
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=(TextView) findViewById(R.id.textView1);
        imageView = (ImageView) findViewById(R.id.imageView1);
        
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                Message message = new Message();
                message.arg1 = 10;   //发送一个int型的数据
                message.arg2 = 30;   //发送一个int型的数据
                /*person.age = 10;
                person.name = "里这里";
                message.obj =  person;*/
                handler.sendMessage(message);
            }
        }).start();
    }
}


0 0
原创粉丝点击