【问题标题】:Is android async task slow?android异步任务慢吗?
【发布时间】: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


【解决方案1】:

是的,它确实有有限的线程池。在 Honeycomb 上,池大小为 1,因此您不能同时执行两个任务。不过,您可以提供自己的执行程序,以使多个任务并行运行。不过,这可能不会提高性能,因此您可能应该考虑对代码进行一些重组:

http://developer.android.com/reference/android/os/AsyncTask.html#executeOnExecutor(java.util.concurrent.Executor, 参数...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2023-01-20
    相关资源
    最近更新 更多