免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1123 | 回复: 1
打印 上一主题 下一主题

Android用线程应注意 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-17 10:21 |只看该作者 |倒序浏览

Android用线程应注意



androidthread.

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

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

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

第二步:修改ThreadDemo.java,代码如下:
  1. 1.package cn.caiwb.thread   
  2. 2.import android.app.Activity;   
  3. 3.import android.os.Bundle;   
  4. 4.import android.os.Handler;   
  5. 5.import android.util.Log;   
  6. 6.public class ThreadDemo extends Activity {   
  7. 7.    private static final String TAG = "ThreadDemo";   
  8. 8.    private int count = 0;   
  9. 9.    private Handler mHandler =  new Handler();   
  10. 10.        
  11. 11.    private Runnable mRunnable = new Runnable() {   
  12. 12.            
  13. 13.        public void run() {   
  14. 14.            //为了方便 查看,我们用Log打印出来   
  15. 15.            Log.e(TAG, Thread.currentThread().getName() + " " +count);   
  16. 16.            count++;   
  17. 17.            setTitle("" +count);   
  18. 18.            //每2秒执行一次   
  19. 19.            mHandler.postDelayed(mRunnable, 2000);   
  20. 20.        }   
  21. 21.            
  22. 22.    };   
  23. 23.    @Override   
  24. 24.    public void onCreate(Bundle savedInstanceState) {   
  25. 25.        super.onCreate(savedInstanceState);   
  26. 26.        setContentView(R.layout.main);     
  27. 27.        //通过Handler启动线程   
  28. 28.        mHandler.post(mRunnable);   
  29. 29.    }   
  30. 30.        
  31. 31.}   
复制代码
第三步:运行上述工程,查看运行效果:




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




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




所以我们在应用退出时,要将线程销毁,我们只要在Activity中的,onDestory()方法处理一下就OK了,如下代码所示:
  1. 1.@Override   
  2. 2.  protected void onDestroy() {   
  3. 3.    mHandler.removeCallbacks(mRunnable);   
  4. 4.    super.onDestroy();   
  5. 5.  }   


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




  7. Java代码  
  8. 1.package cn.caiwb.thread;   
  9. 2.import android.app.Activity;   
  10. 3.import android.os.Bundle;   
  11. 4.import android.os.Handler;   
  12. 5.import android.util.Log;   
  13. 6.public class ThreadDemo extends Activity {   
  14. 7.    private static final String TAG = "ThreadDemo";   
  15. 8.    private int count = 0;   
  16. 9.    private Handler mHandler =  new Handler();   
  17. 10.        
  18. 11.    private Runnable mRunnable = new Runnable() {   
  19. 12.            
  20. 13.        public void run() {   
  21. 14.            //为了方便 查看,我们用Log打印出来   
  22. 15.            Log.e(TAG, Thread.currentThread().getName() + " " +count);   
  23. 16.            count++;   
  24. 17.            setTitle("" +count);   
  25. 18.            //每2秒执行一次   
  26. 19.            mHandler.postDelayed(mRunnable, 2000);   
  27. 20.        }   
  28. 21.            
  29. 22.    };   
  30. 23.    @Override   
  31. 24.    public void onCreate(Bundle savedInstanceState) {   
  32. 25.        super.onCreate(savedInstanceState);   
  33. 26.        setContentView(R.layout.main);     
  34. 27.        //通过Handler启动线程   
  35. 28.        mHandler.post(mRunnable);   
  36. 29.    }   
  37. 30.        
  38. 31.    @Override   
  39. 32.    protected void onDestroy() {   
  40. 33.        //将线程销毁掉   
  41. 34.        mHandler.removeCallbacks(mRunnable);   
  42. 35.        super.onDestroy();   
  43. 36.    }   
  44. 37.}   
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-02-17 21:55 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP