→ qweqweqweqwe:但ap都crash了.. Asynctask 還會有影響?這麼神奇QQ 04/17 21:26
我也覺得很神奇,寫 Android 兩年有餘,這種事情還真的頭次遇到。
※ 編輯: jastpower884 (111.248.232.9), 04/17/2014 21:41:58
推 sdyy:用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) 04/17 21:56
→ sdyy:強制異步 應該可以解決 不然一定會等前面做完才繼續 前面卡了 04/17 21:57
→ sdyy:就動彈不得 04/17 21:57
恩,謝謝,我會試試。其實我比較怕的是,這不單是 Asynctask 的問題,會不會是我用
了一些 static 的關係....。
→ Deltaguita:我覺得你的Asynctask 裡面的連線,要設定timeout 04/17 21:58
其實有設 timeout 的,但是如果 crash 掉,已經 timeout 還是卡著,我是覺得他就會卡
著直到被系統拋掉了。
※ 編輯: jastpower884 (111.248.232.9), 04/17/2014 22:03:42
→ Deltaguita:你的問題我有遇過類似的,到後來我自己實作一個 04/17 22:05
→ Deltaguita:asynctask 先跟系統預設的Thread Poor分開來 04/17 22:06
→ Deltaguita:當時會造成這樣的原因是因為 兩個thread 互相等待 04/17 22:07
→ Deltaguita:當時會造成這樣的原因是因為排隊造成的 04/17 22:07
喔喔喔,這樣啊,我還以為只有我有這種狀況,趕緊來試試。x
※ 編輯: jastpower884 (111.248.232.9), 04/17/2014 22:13:08
恩姆,真的是 Thread 阻塞的問題,用Thread pool 就解決了,根據廠商,阻塞的表現
還會有所不同...。
※ 編輯: jastpower884 (111.248.220.197), 04/19/2014 11:45:01
推 tac0wu:pool? 04/19 16:58
→ qweqweqweqwe:ㄎ 能簡略分享一下嗎 感覺這例子很有趣 04/19 21:13
恩,就是我一個 Activity 會同時使用 AsyncTask.execute() ,至少會有五個吧。
如果這時候 Crash 掉,再重開一次程式, AsyncTask.execute() 就不會立即執行,
有的手機甚至就卡在那邊永遠都不動了。
在我的認知上,是因為 3.0 後的 AsyncTask.execute() 一次只會執行一個,其他的就會
進入排隊的狀態,所以一個塞著隊伍,其他都卡住了。
後來我就改用 executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) 就解決了。
不知道是不是這個指令會把前面的 AsyncTask 給踢掉就是了。
※ 編輯: jastpower884 (111.248.220.197), 04/21/2014 23:06:43
→ Deltaguita:要間容3.0以前的,會有點麻煩 04/22 12:21
→ Deltaguita:可以考慮直接使用一個3.0以後的asynctask(從源碼抓) 04/22 12:22
這邊我很乾脆直接繼承 AsyncTask 去寫一個 function 用 Build.VERSION.SDK_INT 做
判斷了,3.0 前直接用 execute,3.0 後就用 executeOnExecutor。
兩者寫法不同,不過實際跑起來是一樣的。其實這個問題不要讓手機 Crash 掉都不會遇
到,現在我比較頭痛的是 bitmap 的 OOM。
※ 編輯: jastpower884 (118.163.116.90), 04/22/2014 13:24:47
※ 編輯: jastpower884 (118.163.116.90), 04/22/2014 13:26:23
推 Deltaguita:bitmap oom 我之前也是很常遇到阿~~~~ (爆 04/22 14:27
→ Deltaguita:後來有解決就是了,有興趣可以再討論 04/22 14:28
這部份比較像是我個人耍憨包,本來是 LruCache SoftReference 都用上了就是無解
感覺很絕望...後來發現是自己腦殘抓了近百張 300*300 的圖片...大樹會爆不解釋,
這樣的狀況 G2 都不見得撐得住。
※ 編輯: jastpower884 (118.163.116.90), 04/22/2014 15:32:21