实例讲解Android多线程应用开发中Handler的使用
程序员文章站
2024-02-15 09:48:16
其实可以理解handler为主线程和另外的线程之间进行数据更新的东东,并且handler在主线程中,并在handler直接调用线程的run方法
package c...
其实可以理解handler为主线程和另外的线程之间进行数据更新的东东,并且handler在主线程中,并在handler直接调用线程的run方法
package com.handler02; import android.app.activity; import android.os.bundle; import android.os.handler; public class handler02activity extends activity { /** called when the activity is first created. */ private handler handler=new handler(); @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); handler.post(thread1); setcontentview(r.layout.main); system.out.println("================main==============="+thread.currentthread().getid()); system.out.println("============main========="+thread.currentthread().getname()); } runnable thread1=new runnable() { @override public void run() { system.out.println("======thread1==============="+thread.currentthread().getid()); system.out.println("========thread1============"+thread.currentthread().getname()); try { thread.sleep(10000); } catch (exception e) { // todo: handle exception } } }; }
结果是主线程等待10s后才显示出来,并且线程id
package com.handler4; import android.app.activity; import android.os.bundle; import android.os.handler; import android.os.message; import android.view.view; import android.widget.textview; public class handler4activity extends activity { /** called when the activity is first created. */ private textview textview; private myhandler myhandler=new myhandler(); @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); textview=(textview)this.findviewbyid(r.id.textview1); } class myhandler extends handler{ //从消息队列中取出并handlemessage处理消息 @override public void handlemessage(message msg) { textview.settext((string)msg.obj); } } public void download(view view){ thread thread=new thread(new runnable() { @override public void run() { try { string s="zhangzhao"; thread.sleep(5000); //数据发送出来 //textview.settext(s); message message=message.obtain();//最好不要new,这个obtain会节省资源 message.obj=s; myhandler.sendmessage(message);//没有指定looper那么就会发送给主线程中的looper } catch (interruptedexception e) { // todo auto-generated catch block e.printstacktrace(); } } }); thread.start();//会出错原因是在非ui线程里面直接操作ui //主线程维护了一个消息对列,当其他的线程有数据需要传递给主线程的时候,你就把数据封装成一个message对象,然后放在主线程的 //消息队列中去,对应消息的处理由looper,子线程通过handler把下载完的数据封装到message里面,然后把消息取出来交给handler进行处理 //通过handle和message实现两个线程之间达到共享数据 } }
package com.handler5; import android.app.activity; import android.os.bundle; import android.os.handler; import android.os.message; import android.view.view; import android.widget.button; import android.widget.progressbar; import android.widget.textview; public class handler5activity extends activity { /** called when the activity is first created. */ private progressbar progressbar; private button button; private textview textview; private myhandler myhandler=new myhandler(); int i=0; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); progressbar = (progressbar)this.findviewbyid(r.id.progressbar1); textview=(textview)this.findviewbyid(r.id.textview1); } class myhandler extends handler{ @override public void handlemessage(message msg) { int pos =(integer)msg.obj; progressbar.setprogress(pos); textview.settext(pos+"%"); } } public void download(view view){ new thread(new runnable() { @override public void run() { while(i<=100){ try { thread.sleep(300); i+=10; message message=message.obtain(); message.obj=i; myhandler.sendmessage(message); } catch (interruptedexception e) { // todo auto-generated catch block e.printstacktrace(); } } } }).start(); } }
效果:
上一篇: Android中Bitmap用法实例分析
推荐阅读
-
实例讲解Android多线程应用开发中Handler的使用
-
10_Android中通过HttpUrlConnection访问网络,Handler和多线程使用,读取网络html代码并显示在界面上,ScrollView组件的使用_html/css_WEB-ITnose
-
简单讲解iOS应用开发中的MD5加密的相关使用
-
实例讲解iOS应用开发中UIPickerView滚动选择栏的用法
-
举例讲解iOS应用开发中对设计模式中的策略模式的使用
-
Android多线程处理机制中的Handler使用介绍
-
实例讲解如何在iOS应用开发中使用设计模式中的代理模式
-
实例讲解iOS应用的设计模式开发中的Visitor访问者模式
-
iOS应用开发中使用设计模式中的观察者模式的实例
-
实例解析iOS应用多线程开发中NSthread类的用法