通过几个例子来了解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); } }
相关文章推荐
- android handle thread runnable的关系
- 通过几个非常实用的例子了解asp中使用正则表达式
- 通过一个例子了解Ajax
- Handler,Thread和Runnable这三个类之间的关系
- 【转】详解Data Binding 通过几个简单示例深入了解WinForm数据绑定特性
- 通过一个例子了解filter()和find()的用法/children()与find()区别
- java8类库简单了解(三)Runnable和Thread
- 实现Runnable接口的类+使用Thread类的实例来创建线程---->通过实现Runnable接口来创建线程类
- 通过继承Thread实现多继承和通过实现Runnable接口实现多线程的比较
- Thread,Runnable,Callable,Feature的之间的关系
- 详解Data Binding - 通过几个简单示例深入了解WinForm数据绑定特性
- Java多线程基础-2-简单继承Thread,实现Runnable例子
- 【译文】详解Data Binding - 通过几个简单示例深入了解WinForm数据绑定特性
- android中Thread、handler(Handler Thread)、Runnable之间的关系
- OGRE学习笔记(一)通过例子了解场景管理器---------地形创建
- 通过线程池使用多线程并发:ThreadPoolTaskExecutor 的应用例子
- Qt新建线程的方法(有QRunnable,QThreadPool,moveToThread和QtConcurrent的例子)
- Python 编写通过DOS压缩的例子遇到的几个问题
- Thread和Runnable之间的关系
- android 多线程Thread,Runnable,Handler,AsyncTask等之间的关系