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)
}
}