欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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();       
         }       

}