如何使上传到GoogleDrive更快?

问题描述 投票:2回答:1

我有以下代码,应该将图像从我的Android设备上传到我的Google云端硬盘。

  private void saveFileToDrive() {

      progressDialog = ProgressDialog.show(this, "", "Loading...");

    Thread t = new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          // File's binary content
          java.io.File fileContent = new java.io.File(fileUri.getPath());
          FileContent mediaContent = new FileContent("image/jpeg", fileContent);

          // File's metadata.
          File body = new File();
          body.setTitle(fileContent.getName());
          body.setMimeType("image/jpeg");

          File file = service.files().insert(body, mediaContent).execute();
          if (file != null) {
            showToast("Photo uploaded: " + file.getTitle());

            progressDialog.dismiss();
            //startCameraIntent();
          }
        } catch (UserRecoverableAuthIOException e) {
          startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    });
    t.start();
  }

问题是上载时间太长。 这很奇怪,因为图片不太大

而且我想如果我可以通过原始的Drive App上传它,则可以更快地完成。

1)是否可以使上传速度更快,同时又不至于损害图像质量呢?

2)我想使用回调,但是新线程和回调的最佳实践是什么?

3)如何显示上传当前的数字升级进度(到目前为止已完成X%)

是否有任何可用的签名\\模式可以使用?

java android callback
1个回答
1
投票

您是否正在主线程上执行此工作? 我建议将AsyncTaskProgressDialog一起使用,以便在UI等待响应时在后台完成工作。 使用可运行对象进行上传不是一个好主意。 android内置的任何后台线程都应该提高性能。 尤其是因为用户将看到不确定的进度对话框,该对话框比不明原因不明的应用程序更令人愉悦。

另外,如果您使用的是Amazon S3服务器来存储您的上传内容,则可能需要使用Simpl3r之类的第三方库。

如果您不是AsyncTask或Simpl3r的人,那就不要喝茶了。 意向服务是后台上传的绝佳选择,因为上传过程与您的活动完全脱钩。 上传完成后,您可以为用户返回该活动时更新本地存储数据。

1)没有理由您不需要更改任何有关图像的上传。 特别是如果它很小。

2)我不建议回调。 使用本地存储,例如数据库,上传完成后,您可以在本地更新信息。 返回开始上传的活动/片段时,可以使用AsyncTask / AsyncTaskLoader / CursorLoader等加载此本地数据。存在许多用于更改应用程序中实时数据的选项。

3)存在许多模式,我在这里列出了一些我的最爱。

© www.soinside.com 2019 - 2024. All rights reserved.