我们都知道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. 使用AsyncTask:Android提供了一个内置的异步任务类AsyncTask,它可以轻松地在后台线程执行任务并在UI线程更新结果。不过,由于AsyncTask的限制(如线程池大小),对于大量并发任务,可能不是最佳选择。 2. ...
总结,结束Android线程时,关键在于优雅、安全地中断操作,而不是简单粗暴地停止。合理的线程管理可以提升用户体验,避免ANR,并保持应用程序的稳定运行。正确使用Thread、AsyncTask、Handler和Looper等工具,结合...
在源码分析中,我们还应注意代码的注释,它们能帮助我们理解每段代码的功能和设计意图。对于初学者来说,这样的详细注释是极其宝贵的,可以加速理解和学习过程。 总的来说,这个实例提供了关于Android环境下多线程...
标题"Android多线程操作"和描述"Android多线程开发实例,对使用多线程的用户有一定的参考价值!"暗示我们将深入探讨Android中的线程管理以及如何在实践中有效利用。 Android系统默认运行在主线程,也被称为UI线程,...
在实际开发中,可以使用Android的`DownloadManager`类,这是一个系统服务,提供了多线程下载、断点续传和自动处理网络错误等功能。但如果你需要更细粒度的控制,如自定义进度显示或更复杂的逻辑,可能需要自己实现...
1. **使用异步任务(AsyncTask)**:Android提供了AsyncTask类,适合执行耗时操作,但其线程池大小有限,适用于小规模的多线程下载。 2. **使用Handler和Looper**:创建一个后台线程,通过Handler与主线程通信,...
在Android开发中,多线程管理是至关重要的技术,它涉及到应用的性能、用户体验以及资源的有效利用。Android系统默认在主线程(UI线程)执行所有的用户交互,如果在这个线程中执行耗时操作,会导致应用程序无响应...
在实现多线程下载和断点续传时,还需要注意以下几点: - **异常处理**:网络中断、文件I/O错误等异常情况需要妥善处理,确保能够恢复下载。 - **线程同步**:在多线程环境下,需要确保线程安全,防止数据竞争和不...
总之,Android多线程下载涉及到了Android线程模型、并发控制、文件操作等多个方面,需要开发者有扎实的基础知识和实践经验。通过合理利用多线程,不仅可以提升应用性能,还能提高用户满意度。在实际开发中,要根据...
这个主题“Android用线程实现ImageView图片变换+可以停止和继续”主要关注如何利用线程技术来实现图片的动态变换,并且提供了暂停和继续的功能。这涉及到以下几个关键知识点: 1. **线程**:Android主线程(UI线程...
3. **线程创建**:Android提供了多种创建线程的方式,如`Thread`类的直接实例化、`AsyncTask`、`Handler`和`Looper`配合使用,以及`IntentService`等。 ### 二、多线程下载原理 1. **文件分割**:首先,我们需要将...
2. **AsyncTask**或**Thread + Handler**:在Android中,主线程负责UI操作,而网络请求应在工作线程中执行,以免阻塞UI。这个Demo可能使用了`AsyncTask`或者创建自定义`Thread`配合`Handler`来在后台执行下载任务,...
\n- **挂起线程**:可以通过`Thread.sleep()`使线程暂停一段时间,但请注意,这可能导致阻塞主线程,应谨慎使用。\n- **停止线程**:通常不推荐直接调用`Thread.stop()`,因为这可能导致资源泄露和数据不一致。建议...
在Android中,我们可以使用Java的`Thread`类或者`AsyncTask`来创建线程,但考虑到线程管理,通常推荐使用`AsyncTask`,因为它能更好地与UI线程交互。不过,本例中使用了基本的`Thread`类,展示了最基础的多线程下载...
在Android开发中,多线程断点下载是一项重要的技术,特别是在处理大文件或者网络环境不稳定的情况下,能够提高下载效率并确保下载的连续性。这里我们将深入探讨这一主题,包括其原理、实现方式以及如何更新ListView...
本示例"android 多线程 下载 更新 ui 例子"旨在教你如何在Android环境中使用多线程进行文件下载,并实时更新UI来显示下载进度。 在Android主线程中,我们不能执行长时间运行的任务,因为这会导致应用程序无响应...
首先,理解Android线程模型至关重要。Android应用的主要工作线程被称为UI线程或主线程,它负责处理用户界面的更新和事件响应。后台线程通常用于执行耗时任务,避免阻塞UI线程。为了在后台线程和主线程之间交换数据和...
在使用多线程时,还需要注意线程安全问题,如共享数据的同步控制,避免并发访问冲突。此外,Android系统的内存管理特性也需要考虑,比如及时取消不必要的线程,防止内存泄漏。 总之,Android多线程实例是提升应用...
在Android开发中,多线程异步下载图片是一项常见的需求,尤其在开发涉及大量图片展示的应用时,如社交应用、电商应用等。这样的技术能够提高用户...同时,注意优化内存使用,防止内存泄漏,确保应用的稳定性和持久性。
可以使用`ExecutorService`创建一个线程池,配置合适的线程数量,根据应用需求平衡性能和资源消耗。 2. **预读策略**:设计合理的预读策略是关键。例如,你可以根据用户的滚动速度和方向,预测接下来可能需要的数据...