Android之Handler

上传人:小** 文档编号:97434515 上传时间:2022-05-27 格式:DOC 页数:3 大小:39KB
返回 下载 相关 举报
Android之Handler_第1页
第1页 / 共3页
Android之Handler_第2页
第2页 / 共3页
Android之Handler_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述
使用Handler的大致流程:1、首先创建一个Handler对象,可以直接使用Handler无参构造函数创建Handler对象,也可以继承Handler类,重写handleMessage方法来创建Handler对象。2、在监听器中,调用Handler的post方法,将要执行的线程对象添加到线程队列当中。此时将会把该线程对象添加到handler对象的线程队列中。3、将要执行的操作写在线程对象的run方法中,一般是一个Runnable对象,复写其中的run方法就可以了。Handler包含了两个队列,其中一个是线程队列,另外一个是消息队列。使用post方法会将线程对象放到该handler的线程队列中,使用sendMessage(Messagemessage)将消息放到消息队列中。如果想要这个流程一直执行的话,可以在run方法内部执行postDelayed或者post方法,再将该线程对象添加到消息队列中,重复执行。想要线程停止执行,调用Handler对象的removeCallbacks(Runnabler)方法从线程队列中移除线程对象,使线程停止执行。Handler为Android提供了一种异步消息处理机制,当向消息队列中发送消息(sendMessa后就立即返回,而从消息队列中读取消息时会阻塞,其中从消息队列中读取消息时会执行Handler中的publicvoidhandleMessage(Messagemsg)方法,因此在创建Handler时应该使用匿名内部类重写该方法,在该方法中写上读取到消息后的操作,使用Handler的obtainMessage()来获得消息对象。Handler与线程的关系:使用Handler的post方法将Runnable对象放到Handler的线程队列中后,该Runnable的执行其实并未单独开启线程,而是仍然在当前Activity线程中执行的,Handler只是调用了Runnable对象的run方法。Bundle是什么:Bundle是一个特殊的map,它是传递信息的工具,它的键只能是string类型,而且值也只能是常见的基本数据类型。如何让Handler执行Runnable时打开新的线程:1、首先生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android应用程序框架提供HandlerThreadhandlerThread=newHandlerThread(handler_thread);2、在使用HandlerThread的getLooper()方法之前,必须先调用该类的start();handlerThread.start();3、根据这个HandlerThread对象得到其中的Looper对象。4、创建自定义的继承于Handler类的子类,其中实现一个参数为Looper对象的构造方法,方法内容调用父类的构造函数即可。5、使用第三步得到的Looper对象创建自定义的Handler子类的对象,再将消息(Message)发送到该Handler的消息队列中,Handler复写的handleMessage()将会执行来处理消息队列中的消息。消息,即Message对象,可以传递一些信息,可以使用argl.arg2,0bject传递一些整形或者对象,还可以使用Message对象的setData(Bundlebundle)来讲Bundle对象传递给新创建的线程,新创建的线程在执行handleMessage(Messagemsg)时可以从message中利用getData()提取出Bundle对象来进行处理。viewsourceprint?01publicclassHandlerTest2extendsActivity02Override03protectedvoidonCreate(BundlesavedInstanceState)04stub05super.onCreate(savedInstanceState);06setContentView(R.layout.main);07打印了当前线程的ID08System.out.println(Activity-+Thread.currentThread().getId();09生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android应用程序框架提供10HandlerThreadhandlerThread=newHandlerThread(handler_thread);11在使用HandlerThread的getLooper()方法之前,必须先调用该类的start();12 handlerThread.start();13 MyHandlermyHandler=newMyHandler(handlerThread.getLooper();14 Messagemsg=myHandler.obtainMessage();15 将msg发送到目标对象,所谓的目标对象,就是生成该msg对象的handler对象16 Bundleb=newBundle();17b.putInt(age,20);18 b.putString(name,Jhon);19 msg.setData(b);20 msg.sendToTarget();21 22 classMyHandlerextendsHandler24 publicMyHandler()2525 26 publicMyHandler(Looperlooper)27 super(looper);2930 Override31 publicvoidhandleMessage(Messagemsg)32 Bundleb=msg.getData();33 intage=b.getInt(age);34 Stringname=b.getString(name);35 System.out.println(ageis+age+,nameis+name);36 System.out.println(Handler-+Thread.currentThread().getId();37 System.out.println(handlerMessage);38 39 40
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!