`
caiwb1990
  • 浏览: 316137 次
  • 性别: 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多线程文件上传

    1. 使用AsyncTask:Android提供了一个内置的异步任务类AsyncTask,它可以轻松地在后台线程执行任务并在UI线程更新结果。不过,由于AsyncTask的限制(如线程池大小),对于大量并发任务,可能不是最佳选择。 2. ...

    Android线程结束——合理的结束你想结束的线程

    总结,结束Android线程时,关键在于优雅、安全地中断操作,而不是简单粗暴地停止。合理的线程管理可以提升用户体验,避免ANR,并保持应用程序的稳定运行。正确使用Thread、AsyncTask、Handler和Looper等工具,结合...

    Android多线程分段下载源码

    在源码分析中,我们还应注意代码的注释,它们能帮助我们理解每段代码的功能和设计意图。对于初学者来说,这样的详细注释是极其宝贵的,可以加速理解和学习过程。 总的来说,这个实例提供了关于Android环境下多线程...

    Android多线程操作

    标题"Android多线程操作"和描述"Android多线程开发实例,对使用多线程的用户有一定的参考价值!"暗示我们将深入探讨Android中的线程管理以及如何在实践中有效利用。 Android系统默认运行在主线程,也被称为UI线程,...

    android多线程下载

    在实际开发中,可以使用Android的`DownloadManager`类,这是一个系统服务,提供了多线程下载、断点续传和自动处理网络错误等功能。但如果你需要更细粒度的控制,如自定义进度显示或更复杂的逻辑,可能需要自己实现...

    Android多线程下载

    1. **使用异步任务(AsyncTask)**:Android提供了AsyncTask类,适合执行耗时操作,但其线程池大小有限,适用于小规模的多线程下载。 2. **使用Handler和Looper**:创建一个后台线程,通过Handler与主线程通信,...

    android多线程管理

    在Android开发中,多线程管理是至关重要的技术,它涉及到应用的性能、用户体验以及资源的有效利用。Android系统默认在主线程(UI线程)执行所有的用户交互,如果在这个线程中执行耗时操作,会导致应用程序无响应...

    Android多线程文件夹下载及断点续传

    在实现多线程下载和断点续传时,还需要注意以下几点: - **异常处理**:网络中断、文件I/O错误等异常情况需要妥善处理,确保能够恢复下载。 - **线程同步**:在多线程环境下,需要确保线程安全,防止数据竞争和不...

    Android多线程下载(二)

    总之,Android多线程下载涉及到了Android线程模型、并发控制、文件操作等多个方面,需要开发者有扎实的基础知识和实践经验。通过合理利用多线程,不仅可以提升应用性能,还能提高用户满意度。在实际开发中,要根据...

    Android用线程实现ImageView图片变换+可以停止和继续

    这个主题“Android用线程实现ImageView图片变换+可以停止和继续”主要关注如何利用线程技术来实现图片的动态变换,并且提供了暂停和继续的功能。这涉及到以下几个关键知识点: 1. **线程**:Android主线程(UI线程...

    android 多线程下载机制

    3. **线程创建**:Android提供了多种创建线程的方式,如`Thread`类的直接实例化、`AsyncTask`、`Handler`和`Looper`配合使用,以及`IntentService`等。 ### 二、多线程下载原理 1. **文件分割**:首先,我们需要将...

    android 多线程下载demo

    2. **AsyncTask**或**Thread + Handler**:在Android中,主线程负责UI操作,而网络请求应在工作线程中执行,以免阻塞UI。这个Demo可能使用了`AsyncTask`或者创建自定义`Thread`配合`Handler`来在后台执行下载任务,...

    Android多线程PPT教学课件.pptx

    \n- **挂起线程**:可以通过`Thread.sleep()`使线程暂停一段时间,但请注意,这可能导致阻塞主线程,应谨慎使用。\n- **停止线程**:通常不推荐直接调用`Thread.stop()`,因为这可能导致资源泄露和数据不一致。建议...

    Android 多线程下载简单demo之Thread

    在Android中,我们可以使用Java的`Thread`类或者`AsyncTask`来创建线程,但考虑到线程管理,通常推荐使用`AsyncTask`,因为它能更好地与UI线程交互。不过,本例中使用了基本的`Thread`类,展示了最基础的多线程下载...

    android多线程断点下载

    在Android开发中,多线程断点下载是一项重要的技术,特别是在处理大文件或者网络环境不稳定的情况下,能够提高下载效率并确保下载的连续性。这里我们将深入探讨这一主题,包括其原理、实现方式以及如何更新ListView...

    android 多线程 下载 更新 ui 例子

    本示例"android 多线程 下载 更新 ui 例子"旨在教你如何在Android环境中使用多线程进行文件下载,并实时更新UI来显示下载进度。 在Android主线程中,我们不能执行长时间运行的任务,因为这会导致应用程序无响应...

    android 线程之间通过Handler发送消息

    首先,理解Android线程模型至关重要。Android应用的主要工作线程被称为UI线程或主线程,它负责处理用户界面的更新和事件响应。后台线程通常用于执行耗时任务,避免阻塞UI线程。为了在后台线程和主线程之间交换数据和...

    android多线程实例

    在使用多线程时,还需要注意线程安全问题,如共享数据的同步控制,避免并发访问冲突。此外,Android系统的内存管理特性也需要考虑,比如及时取消不必要的线程,防止内存泄漏。 总之,Android多线程实例是提升应用...

    android多线程异步下载图片

    在Android开发中,多线程异步下载图片是一项常见的需求,尤其在开发涉及大量图片展示的应用时,如社交应用、电商应用等。这样的技术能够提高用户...同时,注意优化内存使用,防止内存泄漏,确保应用的稳定性和持久性。

    Android多线程任务优化2:实现后台预读线程

    可以使用`ExecutorService`创建一个线程池,配置合适的线程数量,根据应用需求平衡性能和资源消耗。 2. **预读策略**:设计合理的预读策略是关键。例如,你可以根据用户的滚动速度和方向,预测接下来可能需要的数据...

Global site tag (gtag.js) - Google Analytics