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();
            }
        }
        //----------------------------------------------------
    }
     
     
     
     
     
  • 相关阅读:
    hiho_1081_最短路径1
    hiho_1079_离散化
    hiho_1078_线段树区间修改
    hiho_1069_最近公共祖先3
    【.netcore学习】.netcore添加到 supervisor 守护进程自启动报错
    【.NetCore学习】ubuntu16.04 搭建.net core mvc api 运行环境
    【.NetCore学习】ASP.NET Core EF Core2.0 DB First现有数据库自动生成实体Context
    【vue基础学习】vue.js开发环境搭建
    【vue学习】vue中怎么引用laydate.js日期插件
    【年终总结】个人的2017年年终总结
  • 原文地址:https://www.cnblogs.com/CZM-/p/7966218.html
Copyright © 2011-2022 走看看