Android开发中立即停止AsyncTask和Thread
2015-10-16 09:53
323 查看
欢迎大家访问我的博客http://blog.csdn.net/mikejaps,专注于android
ios app 开发
程序开发中经常会有立即停止线程运行的需要,而通过api是没有办法实现这个目的的,因此对于这个情况,我们需要采取一些“特殊”的方式来实现:
1,判断标志位的办法:
我们要知道在java的线程中,没有办法停止一个正在运行中的线程。在Android的AsyncTask中也是一样的。如果必须要停止一个线程,我们可以采用这个线程中设置一个标志位,然后在线程run方法或AsyncTask的doInBackground方法中的关键步骤判断这个标志位以决定是否继续执行。然后在需要终止此线程的地方改变这个标志位以达到停止线程的目的。
2,合理的利用Exception
从外部调用AsyncTask的cancel方法并不能停止一个已经启动的AsyncTask。这个cancel方法的作用与线程的interrupt方法相似,调用了一个线程的interrupt方法之后线程仍然运行,但是如果该线程的run方法里面调用过sleep的或者wait方法后,处于sleep或wait状态,则sleep和wait立即结束并且抛出InterruptedException异常。AsyncTask的cancel方法也一样,如果在这个Task的doInBackground方法中调用了sleep或wait方法,当在UI线程中调用了这个Task实例的cancel方法之后,sleep或wait立即结束并且抛出InterruptedException异常,但是如果捕获该异常的代码后面还有其他代码,则这些代码还会继续执行。
3,可以在UI上做手脚
如果用户在后台线程正获取内容时做出了取消的行为,我们可以根据用户的这种行为在UI上立即做出反馈,此时,即使线程完成了数据的Loading,我们也不让数据显示出来,算是一种投机取巧的办法吧。
ios app 开发
程序开发中经常会有立即停止线程运行的需要,而通过api是没有办法实现这个目的的,因此对于这个情况,我们需要采取一些“特殊”的方式来实现:
1,判断标志位的办法:
我们要知道在java的线程中,没有办法停止一个正在运行中的线程。在Android的AsyncTask中也是一样的。如果必须要停止一个线程,我们可以采用这个线程中设置一个标志位,然后在线程run方法或AsyncTask的doInBackground方法中的关键步骤判断这个标志位以决定是否继续执行。然后在需要终止此线程的地方改变这个标志位以达到停止线程的目的。
2,合理的利用Exception
从外部调用AsyncTask的cancel方法并不能停止一个已经启动的AsyncTask。这个cancel方法的作用与线程的interrupt方法相似,调用了一个线程的interrupt方法之后线程仍然运行,但是如果该线程的run方法里面调用过sleep的或者wait方法后,处于sleep或wait状态,则sleep和wait立即结束并且抛出InterruptedException异常。AsyncTask的cancel方法也一样,如果在这个Task的doInBackground方法中调用了sleep或wait方法,当在UI线程中调用了这个Task实例的cancel方法之后,sleep或wait立即结束并且抛出InterruptedException异常,但是如果捕获该异常的代码后面还有其他代码,则这些代码还会继续执行。
3,可以在UI上做手脚
如果用户在后台线程正获取内容时做出了取消的行为,我们可以根据用户的这种行为在UI上立即做出反馈,此时,即使线程完成了数据的Loading,我们也不让数据显示出来,算是一种投机取巧的办法吧。
相关文章推荐
- Android快捷开关实现 Wifi开关、蓝牙开关、GPS开关、同步开关、亮度设置开关
- view变化监听器ViewTreeObserver介绍
- android.content.res.Resources$NotFoundException: String resource ID #0x1
- android 申请移动应用的签名生成方法
- 性能优化之Java(Android)代码优化
- android camera MediaRecoder调用顺序
- Android性能调优
- eclipes android 开发中 查看源码配置
- Android---53---多线程下载
- 导入Android项目出现的问题
- Android Studio项目目录结构
- Android虚拟机常见错误及解决办法
- android apk系统签名
- android常用代码收集
- 我的Android进阶之旅------>【强力推荐】Android开源图表库XCL-Charts版本发布及展示页
- 如何滚动到 android 系统上的特定位置的 listview
- Android Studio导入第三开源库
- Android实战简易教程<六十五>(自定义控件实现数字液晶时钟Demo)
- Android Studio 项目结构解析
- Android实战简易教程<六十三>(动画实现唱片播放界面)