【问题标题】:Creating multiple asynctask for syncing files inside a service创建多个异步任务以在服务内同步文件
【发布时间】:2015-07-04 14:12:46
【问题描述】:

我创建了一个服务,我从我的主要活动中调用它来将文件同步到服务器。当服务被调用时,我调用`new FileList().execute();它提供了用于上传和下载的文件列表。在这个 asynctask 的 postexecute 中,我调用了另外两个 asynctasks 来上传和下载

for (int i = 0; i < files_server.size(); i++) {
            filename=files_server.get(i);
            new DownloadFileFromURL().execute(file_url+files_server.get(i));
            try {
                thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }
 for (int j = 0; j < files_phone.size(); j++) {
            filePath=files_phone.get(j);
            new UploadFileToServer().execute();

            try {
                thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        }

服务的onStartcommand代码是

new FileList().execute();
    try {
        thread.sleep(100);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } Toast.LENGTH_SHORT).show();   
    stopSelf();
    return mStartMode;

代码运行良好,但由于我是 android 新手,我找不到不一起创建这么多异步任务的方法,所以我添加了延迟,这不是一个合适的解决方案。帮助我了解如何执行此操作以及服务是否是一个不错的选择以及像这样停止服务是否可以?

【问题讨论】:

    标签: android service android-asynctask sync


    【解决方案1】:

    尝试使用IntentService 而不是异步任务。我认为您应该在 onHandleIntent 方法中创建一个 IntentService 来实现您需要的任务。在方法结束时,您应该通过 sendBroadcast 方法将获得的结果发送到注册的广播接收器。 然后,在一个专用的 BroadcastReceiver 中你应该实现并注册你应该捕获你的意图服务发送的消息并处理它们。

    在你实现了这样的架构之后,你应该在你需要的时候从你的活动/片段中启动意图服务。 通过使用意图服务,您不必处理任务队列,是的,在我看来,使用延迟来平衡队列并不是一个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多