您的位置:首页 > 其它

关于线程退出的问题

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)

也就是说这个下载已经停止
看来一切原理光从字面上还是不容易了解的, 看了源代码才会豁然开朗
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: