这两天学习到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();
}
}