您的位置:首页 > 移动开发 > Android开发

Android AsyncTask的doInBackground不执行问题

2015-12-29 16:45 609 查看
今天在写一个小程序的时候,遇到一个问题:一个activity页面的AsyncTask的doInBackground不执行。

试着在doInBackground里面打印了下log,确认是走不到doInBackground里面:

@Override
protected Result<JokeInfo> doInBackground(Integer... params) {
Log.e("archie", "doInBackground");
Result<JokeInfo> rel = new Result<JokeInfo>();
rel = new JokeStore(mContext).getJokes(0);
return rel;
}


找了半天,最终确认了原因:

AsyncTask在3.0版本以后,默认的执行方式变成了单线程,也就是说,如果有另外一个AsyncTask的实例在执行,那别的实例就必须等待,等到这个实例执行完。

而我在这个activity之前的页面中,先执行了一个AsyncTask的实例,而且我的这个实例中的doInBackground中,执行了一个网络请求,这个请求的timeout很长:

// 超时设置
/* 从连接池中取连接的超时时间 */
ConnManagerParams.setTimeout(params, 3000);
/* 连接超时 */
HttpConnectionParams.setConnectionTimeout(params, 50000);
/* 请求超时 */
HttpConnectionParams.setSoTimeout(params, 120000);


同时我的网络又是有问题的,所以导致我的timeout加起来有17秒之长,所以在17秒内,后一个页面的AsyncTask的doInBackground是肯定不会执行的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: