zoukankan      html  css  js  c++  java
  • Android高手进阶教程(十九)之---Android开发中,使用线程应该注意的问题!

    我们都知道Hanlder是线程与Activity通信的桥梁,我们在开发好多应用中会用到线程,有些人处理不当,会导致当程序结束时,线程并没有被销毁,而是一直在后台运行着,当我们重新启动应用时,又会重新启动一个线程,周而复始,你启动应用次数越多,开启的线程数就越多,你的机器就会变得越慢。

    为了方便 大家理解,我写一个简单的Demo.功能就是每2秒中将应用的Title更换一次。具体步骤如下:

    第一步:新建一个Android工程命名为ThreadDemo。

    第二步:修改ThreadDemo.java,代码如下:

    package com.tutor.thread;  
    import android.app.Activity;  
    import android.os.Bundle;  
    import android.os.Handler;  
    import android.util.Log;  
    public class ThreadDemo extends Activity {  
        private static final String TAG = "ThreadDemo";  
        private int count = 0;  
        private Handler mHandler =  new Handler();  
          
        private Runnable mRunnable = new Runnable() {  
              
            public void run() {  
                //为了方便 查看,我们用Log打印出来  
                Log.e(TAG, Thread.currentThread().getName() + " " +count);  
                count++;  
                setTitle("" +count);  
                //每2秒执行一次  
                mHandler.postDelayed(mRunnable, 2000);  
            }  
              
        };  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);   
            //通过Handler启动线程  
            mHandler.post(mRunnable);  
        }  
          
    }

    第三步:运行上述工程,查看运行效果:

    当然上面不是重点,退出应用时,线程还在跑,打开Logcat视窗或者cmd终端查看,如下(刚吃了午餐回来,线程还在跑着):

    当我们再次启动应用时,会重新启动一个新的线程,如下图所示:

    所以我们在应用退出时,要将线程销毁,我们只要在Activity中的,onDestory()方法处理一下就OK了,如下代码所示:

    @Override  
      protected void onDestroy() {  
        mHandler.removeCallbacks(mRunnable);  
        super.onDestroy();  
      }

    所以ThreadDemo.java的完整代码如下:

    package com.tutor.thread;  
    import android.app.Activity;  
    import android.os.Bundle;  
    import android.os.Handler;  
    import android.util.Log;  
    public class ThreadDemo extends Activity {  
        private static final String TAG = "ThreadDemo";  
        private int count = 0;  
        private Handler mHandler =  new Handler();  
          
        private Runnable mRunnable = new Runnable() {  
              
            public void run() {  
                //为了方便 查看,我们用Log打印出来  
                Log.e(TAG, Thread.currentThread().getName() + " " +count);  
                count++;  
                setTitle("" +count);  
                //每2秒执行一次  
                mHandler.postDelayed(mRunnable, 2000);  
            }  
              
        };  
        @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();  
        }  
    }
    岁月本长而忙者自促;天地本宽而卑者自隘;风花雪月本闲,而劳忧者自冗;天行健,君子以自强不息;地势坤,君子以厚德载物;宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒.不妄取,不妄予,不妄想,不妄求,与人方便,随遇而安
  • 相关阅读:
    1082 射击比赛 (20 分)
    1091 N-自守数 (15 分)
    1064 朋友数 (20 分)
    1031 查验身份证 (15 分)
    1028 人口普查 (20 分)
    1059 C语言竞赛 (20 分)
    1083 是否存在相等的差 (20 分)
    1077 互评成绩计算 (20 分)
    792. 高精度减法
    791. 高精度加法
  • 原文地址:https://www.cnblogs.com/vvning/p/9430427.html
Copyright © 2011-2022 走看看