[問題] Asynctask 無法立即執行的問題(已解決)

作者: jastpower884 (WIND)   2014-04-17 20:38:37
  最近寫了一個程式,功能會大量用到 Asynctask 和 GCM 去向網路取資料。
  但是最近發生了一個狀況,就是在某些狀況下(可能是 Asynctask 沒把東西還沒取
完東西)如果碰到主程序 Crash 的時候,再開啟一次程式 Asynctask 的執行序會全部都
卡住。
  低階機種 HTC Desire S(大樹)倒是不會有這種狀況,但是 LG G2、Sansumg Note3
卻得卡上一段時間才會跑執行序(大約一分鐘),而如果遇到 Sony 的機子(Z、ZR),則會
徹底卡死,除非去清除暫存和快取,還有強制終止程式才能解決。
  碰到這樣的狀況如果我下 ActivityManager.killBackgroundProcess 能夠解決,本
來是想說用 UncaughtExceptionHandler 去攔截後下殺光所有背景服務的指令,只是好
像不是每一次都這麼順利(有的時候可以,有的時候不行)。
  周遭的同仁對這個狀況多出了很有趣的假設,因為大樹的記憶體太少了,所以在程
式寫壞當掉的時候會把這些東西清掉,但是 G2 Note3 或是 ZR Z 那些,則是記憶體
比較大,會把這些卡住的執行序留著,反而讓一次限制五個執行的 AsynTask 卡住了。
  我想問的是,有沒有人遇過太多異步任務卡住的問題?是如何解決呢?
作者: qweqweqweqwe (4qwe)   2014-04-17 21:26:00
但ap都crash了.. Asynctask 還會有影響?這麼神奇QQ
作者: sdyy (中壢市的小智)   2014-04-17 21:56:00
用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)強制異步 應該可以解決 不然一定會等前面做完才繼續 前面卡了就動彈不得
作者: Deltaguita (貝里斯)   2014-04-17 21:58:00
我覺得你的Asynctask 裡面的連線,要設定timeout你的問題我有遇過類似的,到後來我自己實作一個asynctask 先跟系統預設的Thread Poor分開來當時會造成這樣的原因是因為 兩個thread 互相等待當時會造成這樣的原因是因為排隊造成的
作者: tac0wu (在BBS中流浪)   2014-04-19 16:58:00
pool?
作者: qweqweqweqwe (4qwe)   2014-04-19 21:13:00
ㄎ 能簡略分享一下嗎 感覺這例子很有趣
作者: Deltaguita (貝里斯)   2014-04-22 12:21:00
要間容3.0以前的,會有點麻煩可以考慮直接使用一個3.0以後的asynctask(從源碼抓)bitmap oom 我之前也是很常遇到阿~~~~ (爆後來有解決就是了,有興趣可以再討論

Links booklink

Contact Us: admin [ a t ] ucptt.com