Android AsyncTask的doInBackground不执行问题
2015-12-29 16:45
609 查看
今天在写一个小程序的时候,遇到一个问题:一个activity页面的AsyncTask的doInBackground不执行。
试着在doInBackground里面打印了下log,确认是走不到doInBackground里面:
找了半天,最终确认了原因:
AsyncTask在3.0版本以后,默认的执行方式变成了单线程,也就是说,如果有另外一个AsyncTask的实例在执行,那别的实例就必须等待,等到这个实例执行完。
而我在这个activity之前的页面中,先执行了一个AsyncTask的实例,而且我的这个实例中的doInBackground中,执行了一个网络请求,这个请求的timeout很长:
同时我的网络又是有问题的,所以导致我的timeout加起来有17秒之长,所以在17秒内,后一个页面的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是肯定不会执行的。
相关文章推荐
- android studio 加载libs
- 阅读《Android 从入门到精通》(8)——编辑框
- Android 录音声波图
- Android API 中文(13) —— ToggleButton
- android edittext只能输入字母和数字,默认弹出英文输入法 。
- Android SharedPreferences使用以及原理详解
- android adb 显示 device offline
- 关于Android之activity的四种启动模式分析
- 仿 qq 侧滑菜单
- 【Android策略】The content of the adapter has changed but ListView did not receive a notification
- Android 截取字符串
- 任玉刚【Android开发艺术探索】读后笔记四
- Android动画学习笔记-Android Animation
- Android中的Universal-Image-Loader的使用
- Android 之 内存管理
- 详细介绍由viewpaper写的自动轮播页面
- Android Manifest.xml详解
- 说说Android的MVP模式
- android studio 中github 报错 "github cannot add remote " "remote github already exist"
- android studio 中 添加.so 文件