android thread Runnable

原文链接: http://blog.csdn.net/boyupeng/article/details/6208072

这篇文章中有三点需要提前说明一下,

 

一:

在android中有两种实现线程thread的方法:

一种是,扩展java.lang.Thread类 
另一种是,实现Runnable接口

 

二:
Thread类代表线程类,它的两个最主要的方法是: 
run()——包含线程运行时所执行的代码 
Start()——用于启动线程

 

三: 

Handler 机制,它是Runnable和Activity交互的桥梁,在run方法中发送Message,在Handler里,通过不同的Message执行不同的任务。

 

下面分别给出两种线程的实现方法,其一,扩展java.lang.Thread类,也就是把run()方法写到线程里面:

 

    package com.my;  
    import android.app.Activity;  
    import android.os.Bundle;  
    import android.os.Handler;  
    import android.os.Message;  
    import android.util.Log;  
    import android.view.View;  
    import android.view.View.OnClickListener;  
    import android.widget.Button;  
    public class Demo_For_Copy extends Activity  
    {  
        public Button button;  
          
        public Handler mHandler=new Handler()  
        {  
            public void handleMessage(Message msg)  
            {  
                switch(msg.what)  
                {  
                case 1:  
                    button.setText(R.string.text2);  
                    break;  
                default:  
                    break;        
                }  
                super.handleMessage(msg);  
            }  
        };  
          
        /** Called when the activity is first created. */  
        @Override  
        public void onCreate(Bundle savedInstanceState)  
        {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
            button=(Button)findViewById(R.id.button);  
      
            Thread thread=new Thread(new Runnable()  
            {  
                @Override  
                public void run()  
                {  
                    Log.e("1111", "111111111");  
                    // TODO Auto-generated method stub  
                    Message message=new Message();  
                    message.what=1;  
                    mHandler.sendMessage(message);  
                }  
            });  
            thread.start();  
        }  
    }  

 

其二,实现Runnable接口,让类实现Runnable接口,然后把run方法单独提出来:

 

package com.my;  
import android.app.Activity;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
import android.util.Log;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.LinearLayout;  
public class Title_Change_Demo extends Activity implements Runnable  
{  
    public Button button;  
    public LinearLayout my_layout;  
      
    public Handler mHandler=new Handler()  
    {  
        public void handleMessage(Message msg)  
        {  
            switch(msg.what)  
            {  
            case 1:  
                button.setText(R.string.text2);  
                break;  
            default:  
                break;            
            }  
            my_layout.invalidate();  
            super.handleMessage(msg);  
        }  
    };  
      
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState)  
    {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        button=(Button)findViewById(R.id.button);  
        my_layout=(LinearLayout)findViewById(R.id.my_layout);  
          
        Thread thread=new Thread(this);  
        thread.start();  
    }  
      
    @Override  
    public void run()  
    {  
        Log.e("ok", "111111111");  
        // TODO Auto-generated method stub  
        Message message=new Message();  
        message.what=1;  
        mHandler.sendMessage(message);  
    }  
}  
线程的暂停
 
public class MainActivity extends AppCompatActivity  implements View.OnClickListener {

    private SendThread mSendThread;
    private int iDelay=500;
    private int i = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initLayout();

        mSendThread = new SendThread();
        mSendThread.setSuspendFlag();
        mSendThread.start();
    }
    //----------------------------------------------------
    /**
     * 初始化Layout。
     */
    private void initLayout() {
        findViewById(R.id.btn_start).setOnClickListener(MainActivity.this);
        findViewById(R.id.btn_stop).setOnClickListener(MainActivity.this);
    }
    //----------------------------------------------------
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_start:
                startSend();

                break;
            case R.id.btn_stop:
                stopSend();
                break;

            default:
                break;
        }
    }
    //----------------------------------------------------
    private class SendThread extends Thread{
        public boolean suspendFlag = true;// 控制线程的执行
        @Override
        public void run() {
            super.run();
            while(!isInterrupted()) {
                synchronized (this){
                    while (suspendFlag){
                        try{
                            wait();
                        } catch (InterruptedException e){
                            e.printStackTrace();
                        }
                    }
                }
//                send(getbLoopData());
                Log.d("TAG", (String.valueOf(i++)));
                try{
                    Thread.sleep(iDelay);
                } catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
        }

        //线程暂停
        public void setSuspendFlag() {
            this.suspendFlag = true;
        }

        //唤醒线程
        public synchronized void setResume() {
            this.suspendFlag = false;
            notify();
        }
    }
    //----------------------------------------------------
    public void startSend()
    {
        if (mSendThread != null)
        {
            mSendThread.setResume();
        }
    }
    //----------------------------------------------------
    public void stopSend()
    {
        if (mSendThread != null)
        {
            mSendThread.setSuspendFlag();
        }
    }
    //----------------------------------------------------
}
 
 
 
 
 
原文地址:https://www.cnblogs.com/CZM-/p/7966218.html