【问题标题】:How to run Synctask in loop如何循环运行 Synctask
【发布时间】:2016-03-08 06:00:30
【问题描述】:

在我的应用程序中,我需要将数据库与服务器同步,其中有大量记录(大约 300k)。我正在使用分页概念使用AsyncTaskdoInBackground() 中的Http 连接在我的应用程序中下载数据。我想同时下载页面并保存到数据库中。像下面这样在循环中运行AsynTask 是一种好方法,还是有更好的方法来做到这一点?

for (int i = 0 ;i <totalPage ; i++){
    updateRecords(i);
}

private void updateRecords(int page) {

    UpdateRecordsAsyncTask updateRecordsAsyncTask = new UpdateRecordsAsyncTask(this, mContext);
    updateRecordsAsyncTask.setAsyncErrorListener(this);
    updateRecordsAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, Param);
}

【问题讨论】:

  • 是的,你绝对可以从 for 循环中调用异步任务,但我只是怀疑你有没有回调你的任务,这会让你知道所有页面都已成功下载并存储在数据库中.因为可能会发生您有 100 个页面和 100 个异步任务将运行并且意味着当您尝试访问仍未下载的数据时,如果您有解决方案,那么您的方法可以正常工作。

标签: java android loops android-asynctask synchronization


【解决方案1】:

您可以使用Service 代替AsnycTask。正在处理需要下载/上传的大量数据。 AsyncTask 绝对是为了在后台运行操作,但不是这么长的操作。
如果您需要与 Activity 进行交互,您可以从服务创建回调以亲密 UI。
通过以下链接进行相同操作
1) Stackoverflow link
2) Service Tutorial
3) Android Service Tutorial
4) Service with call backs

【讨论】:

    【解决方案2】:

    使用 IntentService 从后台下载数据。 更多说明请访问以下网址。

    [1]: http://developer.android.com/reference/android/app/IntentService.html

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 2019-07-15
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2022-10-09
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      相关资源
      最近更新 更多