Android 中三种启用线程的方法

在多线程编程这块,我们经常要使用Handler(处理),Thread(线程)和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢?

首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。
  而Runnable是一个接口,Thread是Runnable的子类。所以说,他俩都算一个进程。
  HandlerThread顾名思义就是可以处理消息循环的线程,他是一个拥有Looper的线程,可以处理消息循环。

与其说Handler和一个线程绑定,不如说Handler是和Looper一一对应的。

Handler是沟通Activity 与Thread/runnable的桥梁。而Handler是运行在主UI线程中的,它与子线程可以通过Message对象来传递数据

<a name="t0" style="margin: 0px; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; text-decoration: underline;"></a>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();  
  • 1

  • 1

<a name="t1" style="margin: 0px; padding: 0px; color: rgb(73, 73, 73); font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: normal; text-decoration: underline;"></a>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();       
         }       

} 
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,...
    kiddings阅读 3,270评论 0 11
  • 1. tab列表折叠效果 html: 能源系统事业部 岗位名称: 工作地点 岗位名...
    lilyping阅读 1,981评论 0 1
  • 今天leo主要总结线程方面的,分为以下几个知识点: • 认识线程 • 线程的基本用法 • 线程同步 • 子线程...
    SingleoD阅读 9,524评论 25 77
  • 分开之后,我们还能做朋友吗? 当然,不然我靠什么跟你互相伤害? 1、 潮哥做过最后悔的事,是让娜娜变成他的女朋友。...
    周灿_阅读 10,413评论 65 120
  • 五年级的学生 六年级的课文 师:平时你们怎样学略读课文? 带领学生读单元导语,找学习主题和读写方法。 了解单元组文...
    艾儿_8e16阅读 1,102评论 0 0

友情链接更多精彩内容