您的位置:首页 > 其它

通过几个例子来了解Handle Runnable Thread HandleThread的关系.

2011-11-07 14:18 411 查看
//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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息