package com.example.testhandler;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
//Handler常用方法:
//1 post()
//2 postDelayed()
//3 sendMessage()
//4 handleMessage()
public class MainActivity extends Activity {
Runnable updateRunnable;
private final int CANCEL_RUNNABLE=99;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//以下为Handler第一种:根据Message的what不同做出相应的处理
if (msg.what==1) {
System.out.println("收到消息");
}
//以上为Handler第一种:根据Message的what不同做出相应的处理
//以下为:Handler第二种:handler.postDelayed(Runnable, delayMillis)
if (msg.what==CANCEL_RUNNABLE) {
System.out.println("当前消息msg.what="+msg.what);
//取消Runnable的执行
removeCallbacks(updateRunnable);
}
//以上为:Handler第二种:handler.postDelayed(Runnable, delayMillis)
}
};
/////////////////////////////////////////////////////////////////////////////////////////////
//以下为:Handler第一种:发出一个Message
new Thread(){
@Override
public void run() {
Message message1=new Message();
message1.what=1;
message1.obj=new Object();
//handle发出一个Message对象
//为方便测试以将该句子注释
//handler.sendMessage(message1);
super.run();
}
};
//以上为:Handler第一种:发出一个Message
//以下为:Handler第二种:handler.postDelayed(Runnable, delayMillis)
//发出的Runnable会在Handler所绑定线程中延迟一定时间执行
updateRunnable = new Runnable() {
public void run() {
for (int i = 5; i < 15; i++) {
System.out.println("Runnable中的i="+i);
}
}
};
//handle发出一个Runnable对象
//为方便测试以将以下两句注释
//不能使用handler.post(updateRunnable);
//应该使用handler.postDelayed(updateRunnable, 5000);
//然后立马发出一个消息,这样就可以在handleMessage中
//调用removeCallbacks()方法
handler.postDelayed(updateRunnable, 1000);
handler.sendEmptyMessage(CANCEL_RUNNABLE);
//以上为:Handler第二种:handler.postDelayed(Runnable, delayMillis)
//以下为:Handler第三种:handler.post(Runnable)
//发出的Runnable会在Handler所绑定线程中立马执行
//为方便测试以将以下一句代码注释
//handler.post(updateRunnable);
//以上为:Handler第三种:handler.post(Runnable)
}
}