123基金,地雷震diablo,陈慕华的子女
在多线程编程这块,我们经常要使用handler(处理),thread(线程)和runnable这三个类,那么他们之间的关系你是否弄清楚了呢
首先说明android的cpu分配的最小单元是线程,handler一般是在某个线程里创建的,因而handler和thread就是相互绑定的,一一对应。
而runnable是一个接口,thread是runnable的子类。所以说,他俩都算一个进程。
handlerthread顾名思义就是可以处理消息循环的线程,他是一个拥有looper的线程,可以处理消息循环。
与其说handler和一个线程绑定,不如说handler是和looper一一对应的。
handler是沟通activity 与thread/runnable的桥梁。而handler是运行在主ui线程中的,它与子线程可以通过message对象来传递数据
public class mythread extends thread { //继承thread类,并改写其run方法 private final static string tag = "my thread ===> "; public void run(){ log.d(tag, "run"); for(int i = 0; i<100; i++) { log.e(tag, thread.currentthread().getname() + "i = " + i); } } }
启动
new mythread().start();
public class myrunnable implements runnable{ private final static string tag = "my runnable ===> "; @override public void run() { // todo auto-generated method stub log.d(tag, "run"); for(int i = 0; i<1000; i++) { log.e(tag, thread.currentthread().getname() + "i = " + i); } } }
启动
new thread(new myrunnable()).start();
另外一种启用方式
btn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { new thread(new runnable() { @override public void run() { try { ... } catch (exception e) { e.printstacktrace(); } } }).start(); } });
public class mainactivity extends activity { private final static string tag = "uofly android thread ==>"; private int count = 0; private handler mhandler = new handler(); private runnable mrunnable = new runnable() { public void run() { log.e(tag, thread.currentthread().getname() + " " + count); count++; settitle("" + count); // 每3秒执行一次 mhandler.postdelayed(mrunnable, 3000); //给自己发送消息,自运行 } }; /** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); // 通过handler启动线程 mhandler.post(mrunnable); //发送消息,启动线程运行 } @override protected void ondestroy() { //将线程销毁掉 mhandler.removecallbacks(mrunnable); super.ondestroy(); } }
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android apk 项目一键打包并上传到蒲公英的实现方法
Android 自定义LineLayout实现满屏任意拖动功能的示例代码
android 限制某个操作每天只能操作指定的次数(示例代码详解)
Android 集成 google 登录并获取性别等隐私信息的实现代码
网友评论