`

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了,如下代码所示:
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();
    }
}
分享到:
评论

相关推荐

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

    在Android开发中,使用线程是一项常见的任务,但如果不妥善处理,可能会引发一系列问题,比如内存泄漏、性能下降以及资源浪费。以下是一些在Android中使用线程时应注意的关键点,这些点可以从提供的示例代码中提炼...

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

    在Android开发中,线程管理是一项重要的任务,尤其是在处理耗时操作时,如网络请求、数据库操作或大计算量的任务。本篇文章将深入探讨如何合理地结束Android中的线程,以确保应用程序的性能和稳定性。 首先,理解...

    Android多线程文件上传

    在Android应用开发中,文件上传是一项常见的任务,尤其是在处理大文件或者需要提高用户交互体验时,多线程技术显得尤为重要。本主题聚焦于"Android多线程文件上传",我们将探讨如何利用多线程技术来优化文件上传过程...

    Android多线程操作

    在Android应用开发中,多线程是一个至关重要的概念,它涉及到如何在后台处理耗时任务,以避免阻塞主线程并提升用户体验。标题"Android多线程操作"和描述"Android多线程开发实例,对使用多线程的用户有一定的参考价值...

    Android多线程分段下载源码

    在Android开发中,多线程分段下载是一项重要的技术,特别是在处理大文件或者网络环境不稳定的情况下,能够提高下载效率并优化用户体验。这个"Android多线程分段下载源码"实例是一个很好的学习资源,它实现了文件的...

    Android 线程开发 开发实例

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

    Android中AsyncTask实现多线程计数

    本篇将详细讲解如何在Android中使用AsyncTask实现多线程计数,并展示如何将计数结果显示到UI。 首先,我们需要理解Android的线程模型。Android应用的主要工作线程是主线程,也称为UI线程。这个线程负责绘制和交互UI...

    android多线程管理

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

    Android多线程PPT教学课件.pptx

    【Android多线程】\n\n在Android开发中,多线程是不可或缺的一部分,它能够提升应用程序的性能和用户体验。Android系统默认在一个主线程中运行应用程序,包括UI更新,如果在此线程中执行耗时操作,会导致用户界面...

    Android游戏开发之多线程的操作方式源码

    在Android游戏开发中,多线程的应用至关重要,它能让游戏运行更加流畅,避免因为主线程(UI线程)被阻塞而引发的ANR(Application Not Responding)问题。本资源"Android游戏开发之多线程的操作方式源码"正是针对这...

    android多线程下载

    在Android开发中,多线程下载是一项常见的任务,特别是在处理大文件时,为了提高用户体验,通常需要实现下载的暂停、断点续传功能。本文将深入解析如何在Android环境中实现这样的功能。 首先,理解“多线程下载”的...

    [毕设季 android开发]第六讲:Android线程及UI更新

    在Android应用开发中,线程管理和UI更新是至关重要的部分,因为Android系统为每个应用程序分配一个主线程,也称为UI线程。主线程主要负责处理用户界面的交互,包括绘制和更新视图。然而,执行耗时的操作(如网络请求...

    Android多线程下载

    在Android应用开发中,多线程下载是一项关键技术,它能显著提高大文件下载的效率,尤其是在网络条件不稳定的情况下。断点续传是多线程下载的一个重要特性,允许用户中断下载后,从上次停止的位置继续,提高了用户...

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

    在Android系统中,多线程是提升应用性能和用户体验的重要手段。然而,由于Android UI操作必须在主线程中执行,因此我们...在实际开发中,还需注意线程同步问题,避免因并发导致的竞态条件,确保应用的稳定性和安全性。

    Android定时器和线程实现

    在提供的`ThreadDemo`示例中,可能包含了如何在Android中使用线程和定时器的具体代码实现,这将有助于加深对这两个概念的理解。通过分析和学习这个示例,你可以更好地掌握在实际项目中如何运用这些技术。记得实践是...

    android开发揭秘PDF

    第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 1.1.3 Android应用程序框架 1.2 OMS介绍 1.2.1 OPhone介绍 1.2.2 Widget介绍 1.3 小结 第2章 Android开发环境搭建 2.1 ...

    android线程启动方法源代码

    在Android开发中,线程是实现多任务并行执行的关键工具。本文将深入解析Android线程启动的方法,并通过源代码示例帮助初学者理解和掌握这一关键技能。 Android系统基于Java,因此其线程机制遵循Java的基本规则,但...

    AndroidApp中使用SurfaceView制作多线程动画的实例讲解.docx

    ### Android App中使用SurfaceView制作多线程动画的实例讲解 #### SurfaceView的定义与应用场景 在Android开发中,为了确保应用的流畅性和响应性,通常需要将耗时操作(如网络请求)放在非UI线程中进行。然而,...

    180个Android开发常见问题、实用技巧及注意事项

    在Android开发过程中,开发者经常会遇到各种问题,这些挑战可能...以上只是部分Android开发中的常见问题、实用技巧和注意事项,实际开发中还有更多细节需要注意。不断学习和实践,才能成为一名优秀的Android开发者。

    Android异步线程使用Demo

    在Android应用开发中,由于主线程负责用户界面的更新,执行耗时操作(如网络请求、数据库操作等)会阻塞UI,导致应用无响应,因此需要使用异步线程来处理这些任务。本示例"Android异步线程使用Demo"主要探讨的是...

Global site tag (gtag.js) - Google Analytics