zoukankan      html  css  js  c++  java
  • 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();
            }
        }
        //----------------------------------------------------
    }
     
     
     
     
     
  • 相关阅读:
    u-boot 2011.09 调用kernel 的流程
    Delphi repeat Until 运用
    clientdataset的使用
    类型TTreeView.items.add 与 TTreeView.items.addchild有何区别?(10分)
    delphi中nil、null、UnAssigned区别
    操作TreeView(咏南工作室)
    delphi7 treeview + 数据库 实现动态节点维护
    Delphi Try Except 实例
    Delphi 中自定义异常及异常处理的一般方法
    Delphi中的异常处理(10种异常来源、处理、精确处理)
  • 原文地址:https://www.cnblogs.com/CZM-/p/7966218.html
Copyright © 2011-2022 走看看