当你在后台使用Thread或者AsyncTask来处理一些耗时的操作时,可能想要对这些线程加以控制,其中包括中断线程。
很多情况下,当用户启动程序的时候,一个后台运行的线程会同时启动去加载内容。但是,当用户离开程序时,线程应该被打断,因为现在用户已经不再关注程序了,同时也不再关注线程处理的结果,而线程是要占用系统的资源的,如果不及时中断线程,会导致系统资源的浪费。
可是怎么去中断一个线程呢?从文档中可以看到Thread类有stop()方法,这个方法提供一个“简单”的方法去中断线程。不过这种野蛮的中断方式会导致一些问题,而且现在这个方法已经不推荐使用了。
除此之外,你可以使用Thread.interrupt()或者AsyncTask.cancel()方法,但是这不会马上中断线程,因此,只能在自己的线程中实现中断并退出。
在许多情况下,后台运行的线程都有一个主循环,因此你可以在循环中判断线程是否被中断,若被中断,则退出循环,从而结束进程。例如一个线程下载线程,可以通过isInterrupted()方法判断当前线程是否被中断。
thread = new Thread() {
public void run() {
while(!isInterrupted() && hasMoreDataToDownload()){
downloadAndWriteSomeMore();
}
if(isInterrupted()){
deleteThePartiallyDownloadedFile();
}else{
callBack();
}
}
}
thread.start();
thread.interrupt();
如果线程被中断,则调用deleteThePartiallyDownloadedFile()函数,删除没有完成下载的文件。当线程没有被中断,则调用callBack()函数,可以使用handler发送下载完成的信息。
如果你的线程中没有这样一个主循环,例如只是执行一个很耗时的SQL查询操作,可以在查询操作之后调用 isInterrupted()来判断是否需要结束线程。
文章翻译自:http://www.helloandroid.com/tutorials/interruptingcancelling-threads
分享到:
相关推荐
下面小编就为大家带来一篇Android中断并重启一个Thread线程的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文实例讲述了Android中断线程的处理方法。分享给大家供大家参考。具体方法如下: 我现在对一个用户注册的功能 1.用ProgressDialog将当前页面设成不可操作(保留返回键 退出ProgressDialog) 2.用一个线程...
Android多线程断点续传下载,可以应付各种网络中断,应用退出,支持暂停、进度条
在上一篇博文《Android多线程下载示例》中,我们讲解了如何实现Android的多线程下载功能,通过将整个文件分成多个数据块,开启多个线程,让每个线程分别下载一个相应的数据块来实现多线程下载的功能。多线程下载中,...
Android持续获取系统时间,以一个圆形为例,演示通过LooperThread运行线程持续取得系统时间。 我们需要使用Handler类与Message类来处理运行线程,使用Java的Calendar与Thread类来取得系统时间,在编写代码时别忘了...
多线程下载的核心代码已经完成,下面结合到android应用中,我们还得用到SQLite知识,要实现多线程下载,当中断的时候,我们系统会记录一个下载位置,我们把它保存在数据库中,第二次运行的时候再从数据库中读取出来...
一个 Android 开发库, 可以任意切换线程的链式调用任务队列, 可添加定时, 延时任务, 统一异常处理(Ceased 中断),但不影响整个任务链的运行.
数据库GreenDao+Retrofit实现断点下载多线程,可暂停,继续
AsyncTask_GridViewActivity 使用android自带的AsyncTask类实现 Demo_GridViewActivity 队列任务管理 线程控制 Demo_GridViewActivity方式 1:队列优先级 (如果想要listview中移动的区域优先被显示,而不是从上...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
第一部分课程从最基础的Android应用开发环境搭建开始,简单讲解了Android界面及事件处理之后,深入剖析Android Handler多线程机制,重点讲解Android NDK应用层与驱动的通信; 第二部分内容,先简单讲解Android系统...
第一部分课程从最基础的Android应用开发环境搭建开始,简单讲解了Android界面及事件处理之后,深入剖析Android Handler多线程机制,重点讲解Android NDK应用层与驱动的通信; 第二部分内容,先简单讲解Android系统...
java biginteger 源码 Android多线程 使用多线程的好处通常包括提高了代码的效率,充分利用计算资源,减少系统响应时间等。譬如可以将问题划分为子问题...这里介绍几个最常用的线程基本操作,包括创建线程、中断线程、
这些知识点涵盖了 Java 编程语言、Android 应用开发和计算机科学领域的多个方面,涵盖了多重继承机制、线程机制、Activity 生命周期、保存 UI 状态、死锁问题、虚拟存储系统和 TCP 连接关闭过程等多个主题。
说明: ...3.连续计时(允许中断) 4.秒表 5.启动/关闭键(绿表停,红表运行) 6.采集的数据以文件形式保存,路径:storage/sdcard0/222.txt 技术: 1.UI界面 2.传感器管理器API 3.多线程 4.文件存储
本文实例讲述了Android编程开发实现多线程断点续传下载器。分享给大家供大家参考,具体如下: 使用多线程断点续传下载器在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度,在下载过程中记录每个...
本案例在于实现文件的多线程断点下载,即文件在下载一部分中断后,可继续接着已有进度下载,并通过进度条显示进度。也就是说在文件开始下载的同时,自动创建每个线程的下载进度的本地文件,下载中断后,重新进入应用...
简洁完美稳定的Android蓝牙驱动蓝牙串口调试助手,有十六进制显示和发送选择开关,代码简洁,方便修改,并且有接收中断线程,方便移植需要蓝牙通讯的程序中