android 之 中断线程
来源:互联网 发布:数组长度最大是多少 编辑:程序博客网 时间:2024/06/05 04:25
当你在后台使用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();
public void run() {
while(!isInterrupted() && hasMoreDataToDownload()){
downloadAndWriteSomeMore();
}
if(isInterrupted()){
deleteThePartiallyDownloadedFile();
}else{
callBack();
}
}
}
thread.start();
thread.interrupt();
如果线程被中断,则调用deleteThePartiallyDownloadedFile()函数,删除没有完成下载的文件。当线程没有被中断,则调用callBack()函数,可以使用handler发送下载完成的信息。
如果你的线程中没有这样一个主循环,例如只是执行一个很耗时的SQL查询操作,可以在查询操作之后调用 isInterrupted()来判断是否需要结束线程。
- android 之 中断线程
- 如何中断Android线程
- android 中断线程
- 如何中断Android线程
- Android线程中断
- Java多线程之线程中断
- Java并发之线程中断
- Thread类之线程中断
- android 中断线程的处理
- Android 中断线程的处理
- android中的线程中断小结
- java线程之线程中断的用处
- java线程之中断线程Interrupted用法
- 多线程_线程控制之中断线程
- 多线程-线程控制之中断线程
- java多线程之路之-线程中断
- java线程之中断interrupt详解
- Java 基本功 之中断线程的理解
- JSF自定义组件
- 面试题:类型转换与优先级问题
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 题目1031:xxx定律
- discuz马甲
- android 之 中断线程
- hdu 1018
- 程序员练级攻略(转载)
- android--windows 类详细介绍
- 5个常用Java 代码混淆器 助你保护你的代码
- 几个国外优秀PPT模版网站
- 在Fedora等Linux系统中利用Adb连接Android手机
- Linux挂载U盘
- vc文件操作,内存映射