十、Handler的使用
1、handler是用来控制线程的,当要处理大规模数据时如下载文件时,可能耗时很久,程序出现假死,所用handler去控制另外的线程
2、首先要生成对象 Handler handler = new Handler()
3、然后把新的线程(这里名为updateThread)加入到线程队列 handler.post(updateThread); 然后就不用管这个线程了,主线程继续
运行
4、如何产生新线程,可以实现Runnable 接口
//将要执行的操作写在线程对象的run方法当中
Runnable updateThread = new Runnable() {
@Override
public void run()
{
...//操作
}
};
十一、handler和Message类的使用
1、handler 可以使用 Message来传输数据,
2、Message 把参数压入到消息队列中,然后handler会处理消息队列中消息
3、首先要用Handler的对象handler(名字随意)来获得Message类的对象,Message msg = handler.obtainMessage();
4、Message有两个参数,arg1,arg2,他们是int,这是最简单的使用,对参数赋值 Msg.arg1=100;
5、然后用handler.sendMessage(msg),把消息对象发送到消息队列
6、使用handler的handleMessage(Message msg)来处理消息,可以在定义Handler对象时同时用匿名类的方式重写该方法
Handler handler = new Handler(){
//重写处理消息队列中消息的方法
@Override
public void handleMessage(Message msg) {
...//处理操作
}
};
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
package mars.barhandler;
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;
import android.widget.ProgressBar;
public class TestBarHandler extends Activity {
/** Called when the activity is first created. */
//声明控件变量
ProgressBar bar = null;
Button startButton = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//根据控件的ID得到代表控件的对象,并为按钮设置监听器
bar = (ProgressBar)findViewById(R.id.bar);
startButton = (Button)findViewById(R.id.startButton);
startButton.setOnClickListener(new ButtonListener());
}
//当点击startButton按钮时,就会执行ButtonListener的onClick方法
class ButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
bar.setVisibility(View.VISIBLE);
updateBarHandler.post(updateThread);
}
}
//使用匿名内部类来复写Handler当中的handleMessage方法
Handler updateBarHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
bar.setProgress(msg.arg1);
updateBarHandler.post(updateThread);
}
};
//线程类,该类使用匿名内部类的方式进行声明
Runnable updateThread = new Runnable(){
int i = 0 ;
@Override
public void run() {
i = i + 10 ;
//得到一个消息对象,Message类是有Android操作系统提供
Message msg = updateBarHandler.obtainMessage();
//将msg对象的arg1参数的值设置为i,用arg1和arg2这两个成员变量传递消息,优点是系统性能消耗较少
msg.arg1 = i ;
|

本文详细介绍了Android开发中Handler与Message的使用方法,包括创建Handler对象、启动新线程、利用Message传递数据以及如何处理消息队列中的消息。通过一个进度条更新的实际案例,展示了Handler在UI线程与后台线程间协调工作的具体实现。
1254

被折叠的 条评论
为什么被折叠?



