设为首页 加入收藏

TOP

Android入门开发之 Handler使用
2014-11-24 07:23:47 来源: 作者: 【 】 浏览:0
Tags:Android 入门 开发 Handler 使用

Handler实例都是与一个线程和该线程的消息队列一起使用,一旦创建了一个新的handler实例,系统就把该实例与一个线程和该线程的消息队列捆绑起来,这将可以发送消息和runnable对象给该消息队列,并在消息队列出口处处理它们。


Handler默认使用当前的线程RunLoop, 但是也可以通过它的构造函数来指定某个线程的runloop, 或者使用专用的HandlerThread。


必须要注意的是, 使用Handler的线程中,必须实现了Runloop消息循环,否则会产生运行异常。


通常情况下,如果我们在主线程使用Handler, 则不需要我们主动去创建runloop, 因为android系统为自动为activity主线程创建一个runloop。


同样我们可以在一个特殊的子线程中使用Handler,而不必去创建runloop。这个特殊子线程就是HandlerThread, 查看其源码,我们可以发现,它也在run方法中实现了runloop。


下面就介绍Handler的几种使用场景和用法:


1. 在主线程中使用Handler


主线程中使用Handler相对简单, 下面的示例代码实现了在主线程中创建Handler对象,启动一个runable方法去刷新进度条。


代码如下:


//在主线程中创建一个Handler对象


Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
firBar.setProgress(msg.arg1);
handler.post(updateThread);

Log.v("thread----", Thread.currentThread().getName());
}
};


handler.post(updateThread); //去运行


//创建一个runable去刷新进度条


Runnable updateThread = new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
if ( i>= 100) {
handler.removeCallbacks(updateThread);
return;
}



i += 10;

Message msg = handler.obtainMessage();
msg.arg1 = i;

try {
Thread.sleep(1000); //线程暂停1s
} catch (InterruptedException e) {
// TODO: handle exception
e.printStackTrace();
}

handler.sendMessage(msg);
handler1.sendEmptyMessage(0);

}
};


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇获取Android各类系统相关信息的接.. 下一篇Android入门开发之SAX

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·python数据分析岗的 (2025-12-25 10:02:21)
·python做数据分析需 (2025-12-25 10:02:19)
·成为一个优秀的pytho (2025-12-25 10:02:16)
·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)