Android多线程编程中三种启用线程的方法
程序员文章站
2022-12-11 08:50:00
android多线程中三种启用线程的方法
在多线程编程这块,我们经常要使用handler(处理),thread(线程)和runnable这三个类,那么他们之间的关系你是否弄清楚了呢
首先说明...
android多线程中三种启用线程的方法
在多线程编程这块,我们经常要使用handler(处理),thread(线程)和runnable这三个类,那么他们之间的关系你是否弄清楚了呢
首先说明android的cpu分配的最小单元是线程,handler一般是在某个线程里创建的,因而handler和thread就是相互绑定的,一一对应。
而runnable是一个接口,thread是runnable的子类。所以说,他俩都算一个进程。
handlerthread顾名思义就是可以处理消息循环的线程,他是一个拥有looper的线程,可以处理消息循环。
与其说handler和一个线程绑定,不如说handler是和looper一一对应的。
handler是沟通activity 与thread/runnable的桥梁。而handler是运行在主ui线程中的,它与子线程可以通过message对象来传递数据
1,首先第一种启用方法是通过继承thread类,并改写run方法来实现一个线程
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();
2,第二种启用方式创建一个runnable对象
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(); } });
3, 第三种启用方式通过handler启动线程
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(); } }