作者hunej (cookpro)
看板AndroidDev
標題[問題] StrictMode與ANR
時間Mon Apr 15 20:14:11 2013
最近在做的專案需要做很多HTTP Request
剛開始做的時候對Android Thread不太熟
所以參考網路上的範例
直接把所有工作都放在onCreate做
沒有另外開Thread
然後因為範例有用StrictMode
所以也都塞進去
在模擬器上跑的時候是沒遇過ANR
但是Logcat會丟出一堆StrictMode的waring
最近對Android比較多了解
知道在main thread做網路存取其實是不合法的
想要問的是
是不是因為我用了StrictMode
所以才會避開ANR訊息呢?
換句話說
如果要寫得乾淨一點
是不該用StrictMode的
不知道我的理解是不是對的
另外
如果要避免在main thread執行網路存取
大家會推薦用thread還是AsyncTask
我需要用到的行為大概有三種
1.丟HTTP POST給server上的php 讓php去抓MySQL的資料 傳JSONArray回來
2.丟HTTP POST給server上的php 讓php去改MySQL的資料
3.抓網路上的圖片
雖然現在沒有用thread或AsyncTask 直接在main thread上硬做
靠著StrictMode沒有出現ANR
但畢竟不是長遠之計...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.187.37
1F:推 KeySabre:strict對programmer比較嚴格 開發時應該把它打開 04/15 20:17
2F:→ KeySabre:我記得只要main thread負荷太多 就會閃紅色邊框 04/15 20:18
3F:→ KeySabre:至於該用AsyncTask或thread 有很多考量 04/15 20:19
4F:→ KeySabre:AsyncTask用的priority比較低 不適合處理時間太長的工作 04/15 20:20
5F:→ KeySabre:如果跟UI thread完全無關 用thread比較好 04/15 20:21
謝謝回答
不過我想問
開了StrictMode以後
模擬器那邊是不是就不會顯示ANR
但logcat還是會丟錯誤出來?
而我如果用AsyncTask或thread去實作
是不是logcat就不會吃到來自Strict的錯誤了呢
※ 編輯: hunej 來自: 1.167.191.29 (04/15 21:44)
※ 編輯: hunej 來自: 1.167.191.29 (04/15 21:45)
6F:推 KeySabre:why don't you google it 04/16 09:02
7F:推 tomap41017:請用AsyncTaskLoader 04/19 01:06
8F:→ hunej:感謝大家 會用AsyncTasks了!! 04/21 01:36