`
caiwb1990
  • 浏览: 308084 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android用线程应注意

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

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

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

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

    package cn.caiwb.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 cn.caiwb.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();  
        }  
    }  





1
1
分享到:
评论
3 楼 进退取舍 2012-08-22  
最近的工作遇到了这样的问题。感谢!!
2 楼 残丶无双 2012-02-18  
下面的图片怎死了 还是我看错了
1 楼 kondoh 2012-02-17  
从CSDN转来的吧,图片都不显示

相关推荐

    Android 多线程可断点续传上传文件至服务器Demo

    Android 多线程可断点续传上传文件至服务器Demo(Android端编辑器:Android Studio,服务器端编辑器:Eclipse,请注意手机默认下载目录必须要有t007.zip,服务器端必须有D:\temp\temp目录)

    Android开发中,使用线程应该注意的问题.doc

    Android开发中,使用线程应该注意的问题

    Android 线程开发 开发实例

    在Android,这里的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper,这个事android的新 概念。我们的主线程(UI线程)就是一个消息循环的线程。针对这种消息循环的机制,我们...

    android多线程断点下载,源码+实例

    摘要:Java源码,Android源码,多线程,断点下载 android多线程断点下载,通过本Android下载实例,可了解到以下知识技巧:实时得到文件下载的长度,设置获取实体数据的范围、获取文件已下载文件长度、原始文件长度、...

    浅谈Android中多线程切换的几种方法

    我们知道,多线程是Android开发中必现的场景,很多原生API和开源项目都有多线程的内容,这里简单总结和探讨一下常见的多线程切换方式。 我们先回顾一下Java多线程的几个基础内容,然后再分析总结一些经典代码中对于...

    Android多线程学习实例详解

    主要介绍了Android多线程,结合实例形式较为详细的分析了Android多线程的概念、使用方法与相关注意事项,需要的朋友可以参考下

    Android开发--多线程下载加断点续传

    每一段的位置是i * range到(i + 1) * rang - 1,注意最后一段的位置是到filesize - 1; 通过Http协议的Range字段实现下载文件的分段; 通过Java类RandomAccessFile可以实现文件的随机访问,利用seek方法定位的文件...

    android 多任务的多线程断点续传的下载软件

    * ldown是一款跨平台多任务的多线程断点续传的下载软件, * 支持 HTTP / FTP / BT / Magnet 磁力链接等类型的文件下载;支持 Win、android、Linux系统。 * * 欢迎联系:3603233570@qq.com * 注意:演示...

    android 2.3以后的socket注意

    android2.3以后,socket的连接需要一个相应的类似网络线程的管理的方法

    Android实现多线程下载图片的方法

    方法一、直接通过Android提供的Http类访问远程服务器,这里AndroidHttpClient是SDK 2.2中新出的方法,API Level为8,大家需要注意下,静态访问可以直接调用,如果SDK版本较低可以考虑Apache的Http库,当然...

    java线程分析android project例子

    java线程分析android project例子,主要分析了sleep(),join(),yield()和wait()以及notify等方法以及需要注意的事项。

    android开发揭秘PDF

    2.3.2 运行HelloAndroid及模拟器的使用 2.3.3 调试HelloAndroid 2.4 小结 第二部分 基础篇 第3章 Android程序设计基础 3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命...

    Android实战开发租赁管理软件(适配UI,数据的存储,多线程下载)

    我们软件是基于移动设备的。所以我们必然的选择了安卓作为我们的开发工具。课程中,我们将简要的介绍...通过课程学习,让大家能够掌握Android软件开发的流程,注意点,及优化。帮助大家迅速的掌握Android的软件开发。

    Android高级编程--源代码

    作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并...

    android Socket实现简单聊天小程序

    android Socket实现简单聊天小程序,通过一个简单易懂的例子,使大家明白怎么使用socket。里面有多线程的用法,希望大家特别注意。

    android4.0.3 多线程socket通信(客户端->服务器)

    android4.0以后的版本的socket编程与之前有一些差别,本例用android4.0.3的真机进行测试后能实现每隔5秒客户端向服务器端发送一些数据,服务器端会在控制台显示这些数据。这些数据是客户端程序从手机根目录下的test....

    EventBus-android

    该线程和发布线程 主线程相互独立 如果事件响应函数需要较长的时间来执行 则应该使用该模式 例如 网络访问等 需要注意的是 由于系统并行的限制 应该避免在同一时间触发大量的异步线程 EventBus使用一个线程池来提高...

    Android主线程和子线程区别详解

    主线程和子线程的区别 每个线程都有一个唯一标示符,来区分线程中的主次关系的...则需要使用this.Invoke,否则会报异常。 Main函数为主线程,id标示符与UI界面主线程相等 不多说了。看下面的测试代码注释吧。 pu

    Android开发中Looper.prepare()和Looper.loop()

     Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,使用Looper....

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

Global site tag (gtag.js) - Google Analytics