Handler updateBarHandler = new Handler(){
//用于处理消息的函数,从消息队列中取值执行,一个消息执行一次吧
@Override
public void handleMessage(Message msg) {
bar.setProgress(msg.arg1);
Bundle bundle = msg.getData();
//再次把线程放在线程队列中,在run又把消息放在消息队列中,从而又继续这个函数,知道达到了某个条件
updateBarHandler.post(updateThread);
System.out.println("test---->" + bundle.getString("test"));
}
};
对象建立好之后,在主线程中用handler对象 Handler updateBarHandler.post(updateThread);handler本来就是用来处理两个或者多个线程之间的东西,在主线程中调用一个子线程,然后在子线程中进行一些比如下载,解析等复杂操作,如果没有完成,就通过updateBarHandler.sendMessage(msg);向消息队列不断的发送消息,在新建的handler对象中有默认的方法,在向消息队列不断的发送消息之后,会调用handlermessage来处理消息,并且将updateBarHandler.post(updateThread);继续向runnable中的run方法,这样就能继续下去了。
等到操作完成之后,再进行判断,updateBarHandler.removeCallbacks(updateThread);能够返回到主线程当中,完成父子线程之间的任务
//线程类,该类使用匿名内部类的方式进行声明
Runnable updateThread = new Runnable(){
int i = 0 ;
@Override
public void run() {
System.out.println("Begin Thread" + i);
i = i + 10 ;
//得到一个消息对象,Message类是有Android操作系统提供
Message msg = updateBarHandler.obtainMessage();
//将msg对象的arg1参数的值设置为i,用arg1和arg2这两个成员变量传递消息,优点是系统性能消耗较少
msg.arg1 = i ;
Bundle bundle = new Bundle();
bundle.putString("test", "test bundle");
msg.setData(bundle);
try {
//设置当前显示睡眠1秒
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将msg对象加入到消息队列当中
if( i > 100){//如果当i的值为100时,就将线程对象从handler当中移除
//这个函数用于将线程移出消息队列中,不然消息就一直会在run中运行着
updateBarHandler.removeCallbacks(updateThread);
System.out.println(">>>>>>");
}else{
//这里发送的是消息,上面发送的是线程,要执行线程,这个要分清楚
updateBarHandler.sendMessage(msg);
System.out.println("<<<<<<");
}
}
};
分享到:
相关推荐
android:handler简单用法
handler简单使用
简单的在一个Activity里实现一个简单的动画。Handler用来传值,在run方法里执行动态的显示过程。
Android Handler传值的,简单的介绍了Handler的用法
android的多线程消息处理机制核心成员handler,基本用法很简单,相关资料也很多。本例子给大家带来handler的奇葩用法,与大家一起分享。
做项目过程中对handler的4种常用用法的一个总结. 很简单,对新手有帮助
android 开发中 简单的Handler的使用方法基本实例
一个简单的小例子,用来学习android Handler和ProgressBar的用法
开发环境为android4.1.Handler使用例1这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继续启动该...
在主线程中,使用handler很简单,new一个Handler对象实现其handleMessage方法,在handleMessage中 提供收到消息后相应的处理方法即可,这里不对handler使用进行详细说明,在看本博文前,读者应该先掌握handler的基本...
它使用内置的C ++虚拟方法作为回调,而不是内置的函数使用的简单C函数指针。 这允许进行更干净的面向对象的设计,这对于库尤其有用。 性能应与的内置版本,因为它基于原始Arduino源代码的仅略微修改的版本。 用法 ...
VUE watch监听器的基本使用方法详解 目录 1、下面代码是watch的一种简单的用法2、immediate 立即监听3、handler方法 4、 deep属性总结 1、下面代码是watch的一种简单的用法 2、immediate 立即监听 3、handler...
简单的中间件,用于处理异步Express路由内的异常并将它们传递给您的Express错误处理程序。 安装: npm install --save express-async-handler 或者 yarn add express-async-handler 用法: const asyncHandler ...
HTML :: FormHandler-使用MooseHTML表单请参见。 HTML :: FormHandler在... FormHandler的典型应用程序将在Catalyst,DBIx :: Class,Template Toolkit Web应用程序中,但使用方法不限于此。 FormHandler可以在任何Pe
用法 请先安装node-postgres和node-pg-native。 $ npm install pg pg-native 克隆它,然后在您的项目中简单地要求它 var db = require("./path/to/pg-handler"); 设定档 设置数据库连接。 db.config("postgres://...
使用该模块的最简单方法是,在接收到ForbiddenHttpException时检查用户是否登录,否则,将其发送到授权页面。 ### 安装: ### $ php composer.phar require developeruz/yii2-custom-errorhandler " * " ...
安装npm安装async-handler-middleware 用法: 一个thunk内部使用async-handler-middleware的示例。 从'async-handler-middleware'导入asyncHandler export const fetchProducts =()=> asyncHandler(async...
这个gem是用于Rails应用程序的简单分片解决方案。 它是为在多租户应用程序中使用而创建的,在多租户应用程序中,数据在几个数据库之间进行了分区,但是可以通过相同的ActiveRecord模型进行访问。 基本上,这个gem是...
一个简单的 Chef 报告处理程序,用于向 Zookeeper 发送有关 Chef 运行的通知。 这个 Chef Handler 很大程度上基于代码。 要求 Zookeeper 服务器。 使用zk Ruby gem。 用法 您可以通过两种方式安装此处理程序: ...