关于线程退出的问题
2015-02-09 16:19
204 查看
通常耗时的操作我们都会放在线程之中,但是有时候我们的activity销毁之后,线程可能还会在后台继续运行。就像下载一个歌曲,我们如何认为的控制线程的销毁呢。网上的方法很多像ystem.exit(0),HandlerThread,更多的人提出用一个标志位进行判断,如果为true,则继续下载,如果为false,则暂停下载。刚开始的时候,我对这个说法嗤之以鼻,我固执的认为线程具有原子性,下载一个东西不可能进行循环,然后进行判断,而是代码从开始运行一直到结束。后来我看了下断点续传的源码,才想起来这个设置标志位的确是解决线程退出的一个办法。
while (flag
&& (offset = inStream.read(buffer, 0, 1024)) != -1) {
// 写入文件
threadfile.write(buffer, 0, offset);
}
我们在下载东西的时候,要定义一个io流,然后一下下的读取里面的字段
inStream.read(buffer, 0, 1024)
我们可以规定,每次读取的字节数
而这个关于停止线程的flag对象,就放在io流读取之前进行判断
如果flag为false,我们就不在进行inStream.read(buffer, 0, 1024)
也就是说这个下载已经停止
看来一切原理光从字面上还是不容易了解的, 看了源代码才会豁然开朗
while (flag
&& (offset = inStream.read(buffer, 0, 1024)) != -1) {
// 写入文件
threadfile.write(buffer, 0, offset);
}
我们在下载东西的时候,要定义一个io流,然后一下下的读取里面的字段
inStream.read(buffer, 0, 1024)
我们可以规定,每次读取的字节数
而这个关于停止线程的flag对象,就放在io流读取之前进行判断
如果flag为false,我们就不在进行inStream.read(buffer, 0, 1024)
也就是说这个下载已经停止
看来一切原理光从字面上还是不容易了解的, 看了源代码才会豁然开朗
相关文章推荐
- windows游戏开发中一个关于Visual Studio的编译链接成功,输出窗口却显示线程已退出。无法运行项目的问题
- 关于循环线程的正常退出问题。
- 黑马程序员 关于c# windows窗体关闭时线程未能完全退出问题(专题一)
- 关于app退出后子线程停止的问题
- 关于线程和进程的同步问题
- 关于在线程中使用AfxGetMainWnd()出错的问题,终于找到了
- 关于OS中第一线程的问题解决.
- 关于线程创建的问题
- java高级多线程编程--关于线程的停止问题
- 关于在c++的类中使用线程的问题
- java高级多线程编程(一)--关于线程的停止问题
- 关于对话框界面上按回车和ESC键退出问题的处理
- 关于线程问题 [转]
- 关于java多线程中同步的问题(两个线程访问同一个实例类的两个同步方法,会不会互相影响)
- [C#]关于调用Office应用程序后,程序不退出的问题
- 悔过POST-兼谈关于线程问题
- 关于线程的终止问题
- java高级多线程编程--关于线程的停止问题
- 如果我是国王:关于解决 Java 编程语言线程问题的建议
- 关于线程和进程的同步问题