作者issuemylove (skill)
看板AndroidDev
标题[问题] 程式关闭 thread 还是跑
时间Tue Mar 5 16:28:20 2013
想请教各位大大
我的app主要在实作
由 listView 从网路上拿资料
拿资料必须要经由 "thread" 从事网路存取
可是如果thread 并没拿到资料
我此时立刻将app关闭了
再重复开启 此时 thread 一样会跑...
(就是会存在两个thread,造成资料拿两遍)
ListView 就会重复出现相同的 entry view
请问要怎样解决这样的问题QQ
ps. 应该不需要附加程式码吧? 谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.163.3.187
1F:→ asadman1523:最近也有遇到,似乎逻辑设定要好,thread让他自动结束 03/05 18:42
是类似这样吗?
宣告 static boolean threadOn = false;
if( not threadOn){
threadOn = true
thread run
}
thread running is end => threadOn = false;
2F:→ qweqweqweqwe:你如何确定原本的thread还在跑呢? 又如果可以确定thr 03/05 18:44
QQ 我是自己猜的 应该是thread没错
3F:→ qweqweqweqwe:ead还在跑 那应该有机会砍掉吧QQ 03/05 18:45
4F:推 motors55:在thread里设flag,destroy时把flag值改掉? 03/05 18:51
这样的话 thread runnable 里面不就要很多地方设 flag?
不然手机还是要做一些白工 最後没有update ListView的资料而已?
5F:→ NewSpec:这个scenario是android开发最机巴毛的地方之一阿... 03/05 20:32
6F:推 sdyy:用asynctask 去管理会不会比较好 可搭配cancel 03/05 22:43
冏 好像不错! 明天试试
谢谢大大们的指教!
※ 编辑: issuemylove 来自: 118.165.190.102 (03/06 00:26)
7F:推 changyuheng:可以用 handler 吃 runnable 03/06 07:33
8F:→ issuemylove:?? 楼上的意思我不太懂QQ 03/06 11:40
9F:→ qweqweqweqwe:应该是用handler post的意思 03/06 19:35
10F:推 samsonjr:Thread有interrupt(),try keep reference and control it 03/08 00:23
11F:→ samsonjr:或者丢到Thread pool对pool做关闭也行 03/08 00:24
12F:→ issuemylove:可是thread interrupt是要有一些状态下才能interrupt 03/08 11:05
13F:→ issuemylove:不是吗? (wait, sleep, join) 可是我的thread 03/08 11:05
14F:→ issuemylove:只是单纯做网路下载,并没有用到 wait, sleep, join 03/08 11:06
15F:→ issuemylove:等 function 03/08 11:06
16F:推 ChonPiggy:看到楼上的想起最近也在烦恼类似的事情... 03/09 02:44
17F:→ ChonPiggy:例如类似 .accept() 的 blocking code 怎麽 interrupt 03/09 02:45
18F:推 MetalChao:其实只要有 blocking 的动作, 最终(在API内部)还是会呼 03/09 13:56
19F:→ MetalChao:叫到 wait或sleep, 只是会以不同的 exception 表示 03/09 13:57
20F:→ MetalChao:API内部会去抓InterruptedException然後转成别的 03/09 13:58
21F:→ MetalChao:例如socket的accept/read, 被 interrupt 时也会发出 03/09 13:59
22F:→ MetalChao:InterruptedIOException (不是 InterruptedException) 03/09 13:59
23F:→ MetalChao:如果想要定时离开 blocking 做别的事, 可以setSoTimeout 03/09 14:00
24F:→ MetalChao:就不会完全被 block 住 03/09 14:00
25F:→ MetalChao:另外如果你的code真的没有呼任何blocking的API, 也可以 03/09 14:01
26F:→ MetalChao:自己去检查 Thread.currentThread.isInterrupted()来知 03/09 14:02
27F:→ MetalChao:道thread是否有被 interrupt() 03/09 14:02
28F:→ issuemylove:最後我采用了逻辑设定的办法QQ||| 感觉很笨 03/14 17:10
29F:→ issuemylove:但我想了很久还是不知道thread怎麽关 哈哈orz 03/14 17:10