【发布时间】:2012-04-01 13:14:06
【问题描述】:
是android异步任务慢还是我做错了什么?
这就是我的工作
Log.e("Filler", "before");
new DownloadListContent().execute("string");
Log.e("Filler", "after");
和 DownloadListContent()..
class DownloadListContent extends AsyncTask<Object, Object, Object> {
protected Void doInBackground(Object... urls) {
Log.e("Filler", "Am in doInBackground");
....
}
这里是 logCat。
03-15 23:18:**47**.598: E/Filler(17150): before
03-15 23:18:**47**.598: E/Filler(17150): after
03-15 23:18:**59**.789: E/Filler(17150): Am in doInBackground
即在后台执行前 12 秒。 为什么会这样?
与此同时,我还有其他 other 类的 AsyncTask 实例执行其他一些网络工作。 AsyncTask 会相互影响吗?
我真的想不通!
更新
感谢 cmets。似乎异步对同时运行的线程数有硬性限制。如果您必须同时下载大量图像和数据,这将是一个杀手锏。
按照 CommonsWare 的方法 here 我可以分离 asyncTask 的类型,这样一种类型(图像)就不会阻塞其他类型(列表数据)。
【问题讨论】:
-
是在手机上还是在模拟器上?模拟器速度很慢,具体取决于您的计算机硬件。
-
不,我正在 HTC Desire 上进行测试。12 秒太慢了!允许同时运行多少个异步任务有硬性限制吗?
-
显示你所有的类代码。请记住,只有这么多的资源可供使用,例如 CPU、内存甚至带宽(根据位置或是否在 wifi 上可能会有所不同)。您可能会发现此任务正在等待其他任务完成,然后才能访问做网络相关的事情,但这只是猜测而不是事实,因为我们需要更多代码。
-
感谢 cmets。似乎异步任务的队列有限
标签: java android android-asynctask