//Handler直接pos Runnable的例子
//Handler直接把一个Runnable对象放入消息队列,将会执行Runnable的run方法体
//Handler这里可以理解为Handle只是用来发送消息,不过消息有点特别,消息的内容是执行Runnable的run方法体
//new Handler();括弧没有指定参数,所以Handler处理消息是在本线程(Activity的main线程)处理.
package com.maok.handlertest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class HandlerTest extends Activity {
/** Called when the activity is first created. */
private Button startButton = null;
private Button endButton = null;
Handler handler = new Handler();
<strong> Runnable updataThread = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("线程消息");
handler.postDelayed(updataThread, 3000);
}};</strong>
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton = (Button)findViewById(R.id.button1);
endButton = (Button)findViewById(R.id.button2);
startButton.setOnClickListener(new startButtonListener());
endButton.setOnClickListener(new endButtonListener());
}
class startButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
<strong>handler.post(updataThread);</strong>
}
}
class endButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
<strong>handler.removeCallbacks(updataThread);</strong>
}
}
}
//复写Handler的handleMessage函数,决定了Handle将如何处理消息;
//复写了handleMessage后便可接受其他地方发过来的消息(一般是在另外线程处理耗时比较高的过程,然后发消息给主线程的Handler,由
//handleMessage函数处理UI的更新),例子三就是实现这个功能.
package com.maok.handlertest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class HandlerTest extends Activity {
/** Called when the activity is first created. */
private Button startButton = null;
private Button endButton = null;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
System.out.println("有消息");
switch(msg.arg1){
case 101:
System.out.println("执行...");
break;
case 102:
break;
}
super.handleMessage(msg);
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton = (Button)findViewById(R.id.button1);
endButton = (Button)findViewById(R.id.button2);
startButton.setOnClickListener(new startButtonListener());
endButton.setOnClickListener(new endButtonListener());
}
class startButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Message msg = new Message();
msg.arg1 = 101;
handler.sendMessage(msg);
}
}
//创建一个线程来执行Runnable的run方法体.
//主线程利用handler.sendMessage()和新线程单方面通信
//新线程-->(通知)主线程
package com.maok.handlertest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class HandlerTest extends Activity {
/** Called when the activity is first created. */
private Button startButton = null;
private Button endButton = null;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.arg1){
case 101:
System.out.println("收到线程工作消息..");
break;
case 102:
break;
}
super.handleMessage(msg);
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton = (Button)findViewById(R.id.button1);
endButton = (Button)findViewById(R.id.button2);
startButton.setOnClickListener(new startButtonListener());
endButton.setOnClickListener(new endButtonListener());
}
Runnable r = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
for(int i = 0;i < 10;i++){
Message msg = new Message();
msg.arg1 = 101;
System.out.println("线程工作中..." + Thread.currentThread().getId());
handler.sendMessage(msg);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}};
class startButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Thread updataThread = new Thread(r);
updataThread.start();
}
}
//创建一个线程,线程有自带的looper
//绑定消息处理到新线程的looper
//主线程利用handler.sendMessage()和新线程单方面通信
//主线程调用Message msg = new Message();msg.arg1 = 101;handler.sendMessage(msg);----->(通知)新线程
//处理过程在新线程处理.
//和方法3比起来,这中方法更灵活.
package com.maok.handlertest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class HandlerTest extends Activity {
/** Called when the activity is first created. */
private Button startButton = null;
private Button endButton = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton = (Button)findViewById(R.id.button1);
endButton = (Button)findViewById(R.id.button2);
startButton.setOnClickListener(new startButtonListener());
endButton.setOnClickListener(new endButtonListener());
}
class myHandler extends Handler{
public myHandler() {
super();
// TODO Auto-generated constructor stub
}
public myHandler(Looper looper) {
super(looper);
// TODO Auto-generated constructor stub
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch(msg.arg1){
case 101:
System.out.println("处理过程工作在-->" + Thread.currentThread().getId());
break;
case 102:
break;
}
}
}
class startButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
HandlerThread p = new HandlerThread("updata_Thread");
p.start();
Handler handler = new myHandler(p.getLooper());
Message msg = new Message();
msg.arg1 = 101;
handler.sendMessage(msg);
}
}