作者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