一、重要参考资料
【参考资料】
目前来看,下面的几个网址中的内容质量比较不错,基本不需要再读别的网址了。
1、android消息机制一
http://xtfncel.javaeye.com/blog/663517
2、Android消息机制二
http://xtfncel.javaeye.com/blog/663518
3、Android线程间通信的message机制
http://www.javafun.cn/viewthread.php?tid=1517
4、
5、Android中Handler的使用方法-在子线程中更新界面
http://blog.csdn.net/yangpeng98/archive/2010/05/26/5625955.aspx
二、知识要点
一、知识点
1、handler应该由处理消息的线程创建。
2、handler与创建它的线程相关联,而且也只与创建它的线程相关联。handler运行在创建它的线程中,所以,如果在handler中进行耗时的操作,会阻塞创建它的线程。
【来源】以上来自:
二、一些知识点
1、Android的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper。主线程(UI线程)就是一个消息循环的线程。
2、
Looper.myLooper(); //获得当前的Looper
Looper.getMainLooper () //获得UI线程的Lopper
3、Handle的初始化函数(构造函数),如果没有参数,那么他就默认使用的是当前的Looper,如果有Looper参数,就是用对应的线程的Looper。
4、如果一个线程中调用Looper.prepare(),那么系统就会自动的为该线程建立一个消息队列,然后调用 Looper.loop();之后就进入了消息循环,这个之后就可以发消息、取消息、和处理消息。
【来源】以上来自:http://www.javafun.cn/viewthread.php?tid=1517
三、应用实例
3.1 handler传递message
【应用示例一】
packagecom.android.tutor;
importjava.util.Timer;
importjava.util.TimerTask;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
publicclassHandlerDemoextendsActivity{
//title为setTitle方法提供变量,这里为了方便我设置成了int型
privateinttitle=0;
privateHandlermHandler=newHandler(){
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
case1:
updateTitle();
break;
}
};
};
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Timertimer=newTimer();
timer.scheduleAtFixedRate(newMyTask(),1,5000);
}
privateclassMyTaskextendsTimerTask{
@Override
publicvoidrun(){
Messagemessage=newMessage();
message.what=1;
mHandler.sendMessage(message);
}
}
publicvoidupdateTitle(){
setTitle("WelcometoMrWei'sblog"+title);
title++;
}
}
源码来自:http://blog.csdn.net/Android_Tutor/archive/2010/05/08/5568806.aspx
上面的代码,直接在主线程中定义Handler成员。在子线程中通过主线程的handler向主线程发送消息。其使用步骤如下:
1、在主线程中定义handler,并为这个handler实现handleMessage方法。
2、在子线程中调用主线程的handler,通过其sendMessage方法发送消息。
【应用示例二】
publicclassActivity1extendsActivityimplementsOnClickListener{
Buttonbutton=null;
TextViewtext=null;
@Override
protectedvoidonCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity1);
button= (Button)findViewById(R.id.btn);
button.setOnClickListener(this);
text= (TextView)findViewById(R.id.content);
}
publicvoidonClick(View v)
{
switch(v.getId()) {
caseR.id.btn:
Looper looper = Looper.myLooper();//取得当前线程里的looper
MyHandler mHandler =newMyHandler(looper);//构造一个handler使之可与looper通信
//buton等组件可以由mHandler将消息传给looper后,再放入messageQueue中,同时mHandler也可以接受来自looper消息
mHandler.removeMessages(0);
String msgStr ="主线程不同组件通信:消息来自button";
Message m = mHandler.obtainMessage(1, 1, 1, msgStr);//构造要传递的消息
mHandler.sendMessage(m);//发送消息:系统会自动调用handleMessage方法来处理消息
break;
}
}
privateclassMyHandlerextendsHandler{
publicMyHandler(Looper looper){
super(looper);
}
@Override
publicvoidhandleMessage(Message
msg) {//处理消息
text.setText(msg.obj.toString());
}
}
}
这是另一种使用handler的方法是可以派生一个Handler的子类,在子类中实现handleMessage方法。
1、定义Handler的派生类,并在子类中实现handleMessage方法。
2、在主线程的类中,定义该子类的对象。
3、在子线程中,调用主线程中的对象。
3.2 handler传递runnable对象
还有另外一种用Handler来进行线程间通信的方式,那就是用Handler来传递一个runnable对象,而不是一个message。
【应用实例三】
使用步骤
1、在主线程中定义Handler对象
2、构造一个runnable对象,为该对象实现runnable方法,在该方法中进行一些你想做的耗时操作。
3、在子线程中使用Handler对象post(runnable)对象.
分享到:
相关推荐
玩转Android---组件篇---Handler的使用玩转Android---组件篇---Handler的使用玩转Android---组件篇---Handler的使用
hive-hbase-handler-1.2.1.jar解决hive1.2.1,hbase不兼容情况!
HBase2.1.3整合Hive3.1.2,Hive官方的hive-hbase-handler-3.1.1.jar包不好用,自己编译后的,确认好用
Android Weak Handler Memory safer implementation of android.os.Handler Problem Original implementation of Handler always keeps hard reference to handler in queue of execution. Any object in Message or...
hive1.2.2版本和hbase1.0.2的通信包,重新封装的,也进行了相关代码的删除和部分修改
hive0.8.1和hbase0.92.0集成的hive-hbase-handler.Jar包,里面包含:hbase-0.92.0.jar、hbase-0.92.0-tests.jar、hive-hbase-handler-0.9.0-SNAPSHOT.jar。经测试没有问题。
Hive-1.2.1与HBase-1.3.1兼容处理的jar包 hive-hbase-handler-1.2.2.jar
Introduction Declarative error handling.... @AutoHandler // let compiler know it should analyse your class public interface SimplerErrorListener { // your code has to implement this in
hive和hbase的整合所需要的编译后的jar包。 注意:这里的hbase版本为:1.2.1 hive的版本为:1.2.1
详细描述了Android的消息处理机制中,Looper和handler类详解
hive0.10.0和hbase0.94.4集成的hive-hbase-handler.Jar包,经测试没有问题。
idea2019.3使用ecj-4.10.jar 处理bom字符,不用去除文件默认的bom字符,java compiler编译方式更改为eclipse,下面的path to ecj batch compile tool 设置为下载好的资源就可以,考虑了项目整体编码对调用ecj的影响
开源项目-ddo-go-vue-handler.zip,ddo/go-vue-handler v0.0.1 is just released Host Vue app with Router history mode in Golang
Laravel开发-laravel-error-handler Laravel 5框架的错误处理程序包
Laravel开发-laravel-api-query-handler Laravel API查询处理程序包。
Laravel开发-laravel-api-handler 为laravel rest-api提供帮助函数的包