昨天写代码的时候碰上了NetworkOnMainThreadException,这个是我之前一直没有碰到过的,所以细查了下,做个汇总。
StrictMode是android2.3之后加的一个新API。那么它是来干什么的呢?简言之,就是使你的代码更流畅、更规范的。
如果你的代码报出了NetworkOnMainThreadException,那么你需要在onCreate插入以下代码:
public void onCreate() {
if (DEVELOPER_MODE) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyLog()
.build());
}
super.onCreate();
}
或者直接定义为默认的:
public void onCreate() {
if (DEVELOPER_MODE) {
StrictMode.enableDefaults();
}
super.onCreate();
}
这样你就启用了一个在UI线程进行各项操作的一个检查,比如:android2.3 后你不能在主thread上进行网络的请求操作。事实上,即将发布的4.0版本,我们把在主 thread
请求网络,视为一个严重的错误,因为网络访问是不流畅的,会拖累你的程序。所以启用这个模式后,对于不规范的地方它会在Log中给你提示。
以上这些代码只是在开发阶段需要加上的,所以条件是 DEVELOPER_MODE ,发布时注释掉即可。另外,使用时只要在入口 Activity 中加入以上这段代码,整个项目都有用,不需要在每个 Activity 中都加。