首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android在运行的异步任务之间交换数据

Android在运行的异步任务之间交换数据
EN

Stack Overflow用户
提问于 2013-02-23 07:57:29
回答 3查看 835关注 0票数 0

我试图实现的是在运行的异步任务(doInBackground)之间共享数据。所以发生的事情是,我有一个单独的类(扩展Asynctask),用它自己的异步类加载数据和活动,我用它来更新活动中的信息。基本上,我试图实现的是活动中的线程(监控线程)与加载器一起工作,并从加载器类中提供一些数据,当加载器准备就绪时,“监控”和“加载器”都应该终止。

我尝试使用接口设置一个易失性变量,但没有成功,我似乎无法在线程之间共享信息(Asynctask)。有什么建议吗?也许需要一个Exchange类?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-23 08:08:07

你有什么理由不能使用onProgressUpdate功能吗?我可能会被你的用例搞糊涂...但下面可能是一个示例:

代码语言:javascript
复制
class MyActivity extends Activity {

  private AsyncTask<Uri,MyDataObject, MyResult> = new AsyncTask<Uri,MyDataObject, MyResult>() {
    private MyResult mResult;

    protected MyResult doInBackground(Uri... uris) {           
      int count = urls.length;
      mResult = new MyResult()

      for (int i = 0; i < count; i++) {
        MyDataObject anObject = mDataLoader.getObject(uris[i]);
        publishProgress(anObject);

        mResult.add(anObject);
        // Escape early if cancel() is called
        if (isCancelled()) break;
      }
      return totalSize;
    }

    protected void onProgressUpdate(MyDataObject... data) {
      addDataToUI(data[0]);
    }

    protected void onPostExecute(MyResult result) {
      Toast.makeText("All Done!", Toast.LENGTH_LONG).show();
    }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2013-02-23 08:12:03

听起来您想让Activity在加载器线程加载数据时显示一些信息?因此,您需要将一些信息从加载器传递到活动中,从而更新UI。在这种情况下,我不确定在活动中是否需要第二个AsyncTask (和相关线程),因为在更新UI之前,您仍然需要将数据获取到主线程。相反,您应该以JRaymond suggests的身份执行操作,使用publishProgress将更改推送到主线程,并在onProgressUpdate的主线程上处理它们

如果你需要更通用的东西,你也可以考虑使用java.util.concurrent。例如,BlockingQueue可用于实现消费者/生产者模式。参见the Javadoc for a code snippet

票数 1
EN

Stack Overflow用户

发布于 2014-04-18 06:42:56

所有异步任务(除非使用提供的executor执行)都在同一后台线程上运行,因此无法同时执行它们。

来自文档:

首次引入时,AsyncTasks是在单个后台线程上串行执行的。从DONUT开始,这被更改为允许多个任务并行操作的线程池。从HONEYCOMB开始,任务在单个线程上执行,以避免由并行执行导致的常见应用程序错误。

如果您确实想要并行执行,可以使用THREAD_POOL_EXECUTOR.调用executeOnExecutor(java.util.concurrent.Executor,Object[])

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15035255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档