创建多个 AsyncTask

Posted

技术标签:

【中文标题】创建多个 AsyncTask【英文标题】:Creating Multiple AsyncTask 【发布时间】:2013-03-13 15:24:31 【问题描述】:

我正在为我的 android 项目使用外部库。使用该库,我从流 Mp3 url 获取 ID3 标签。该代码使用 URLConnection 到达链接,然后获取标签信息。但问题是它的过程非常缓慢。

在主线程上执行此操作时,需要 2 多分钟才能从其 URL 中获取 25 首歌曲的 ID3 标签。所以我决定使用多个 AsyncTasks 来加快这个过程,我在下面使用了这段代码。它变得更快了一点,但仍然低于 2 分钟标记几秒钟。当我从 DDMS 检查线程选项卡时,我看到在运行时,只有 6 个 AsyncTask 被创建并运行。

我的问题是,如何在这个循环中增加正在运行的 AsyncTask 的数量。

counter=0;
for (final SongDetail e : songs) 

  new AsyncTask<Void , Void, Void>() 


  @Override
  protected Void doInBackground(Void... params) 

    try 

       MP3 mp3 = new MP3(e.getLink());
       e.setTitle(mp3.getTitle());
       e.setArtist(mp3.getBand());
     catch (MalformedURLException e1) 
          e1.printStackTrace();
     catch (IOException e2) 
          e2.printStackTrace();
    
    return null;
    

  @Override
  protected void onPostExecute(Void result) 
   counter++;

   if(counter==songs.size()) 
      Log.d("KA","loop finished");

     
  

 .execute();

【问题讨论】:

【参考方案1】:

Android 操作系统将决定在任何给定时间可以运行多少并行线程。仅仅因为你启动其中的 20 个并不意味着它们都会运行。 Android 操作系统会将它们排队并一次运行其中的一些。

有关详细信息,请参阅此答案: Running multiple AsyncTasks at the same time -- not possible?

【讨论】:

以上是关于创建多个 AsyncTask的主要内容,如果未能解决你的问题,请参考以下文章

深入分析AsyncTask

如果我们必须在android中使用viewpager创建多个页面,那么我们是不是必须创建多个片段?还有其他选择吗?

如何为多个队列管理器创建多个 MQQueueConnectionFactory

HTML Canvas 创建多个动画矩形

使用spring创建多个kafka主题

2019-11-29-C#-直接创建多个类和使用反射创建类的性能