Android 从现实生活中理解线程消息机制
2010-08-26 10:57:00 来源:WEB开发网private Handler handler;
private int textLength = 0;
private boolean isStop = true;
首先将要使用的数据类型声明在头部,将会使用到 java 的 Thread 和Android Handler 对象,首先实现Runable 对象,代码如下:
Runablerun = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
int i = 0;
do {
i++;
Thread.sleep(i > 15 ? 20 : 100);
Message msg = handler.obtainMessage();
msg.arg1 = i;
msg.sendToTarget();
if (i == textLength) {
isStop = false;
}
} while (isStop);
} catch (Exception e) {
// TODO: handle exception
}
}
};
上面代码还可以如此写法:
Message msg=new Message();
msg.arg1=i;
handler.sendMessage(msg);
第一种写法是message 从handler 类获取,从而可以直接向该handler 对象发送消息,第二种写法是直接调用 handler 的发送消息方法发送消息。不过不管是第一种方法好还是第二种方法好,都要在同样的handler 接收消息,否则会报异常。下面实现handler 对象,代码如下:
/**
* 启动线程
*
* @param tv
* @param text
* @return
*/
public Handler getHandler(final TextView tv, final String text) {
Handler hand = new Handler() {
public void handleMessage(Message msg) {
tv.setText(text.substring(0, text.length() - msg.arg1));
super.handleMessage(msg);
};
};
return hand;
}
这里返回一个handler 对象,实际上是返回去给上面我们的handler 对象使用,这里我把它封装成一个方法,可以让它在每次接收到消息后去使用消息处理文本每次减1
设置
更多精彩
赞助商链接