当前位置: 移动技术网 > IT编程>移动开发>Android > Android多线程编程中三种启用线程的方法

Android多线程编程中三种启用线程的方法

2018年09月17日  | 移动技术网IT编程  | 我要评论

123基金,地雷震diablo,陈慕华的子女

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

} 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网