3

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 アプリ経由でアップロードした方が、処理が速くなると思います。

1) 画質をあまり損なわずに、アップロードを高速化する方法はありますか?

2) コールバックを使用することを考えましたが、新しいスレッドとコールバックのベスト プラクティスは何ですか?

3) アップロードの現在の数値アップロードの進行状況 (これまでに X% 完了) を表示するにはどうすればよいですか?

すぐに使用できる署名\パターンはありますか?

4

1 に答える 1

1

この作業はメインスレッドで行っていますか? UI が応答を待っている間に作業がバックグラウンドで行われるように、ProgressDialogでAsyncTaskを使用することをお勧めします。アップロードにランナブルを使用することはお勧めできません。Android に組み込まれているバックグラウンド スレッドは、パフォーマンスが向上するはずです。特に、明らかな理由が不明なために保留されているアプリよりも、ユーザーが不確定な進行状況ダイアログを表示するためです。

または、Amazon S3 サーバーを使用してアップロードを保存している場合は、Simpl3rなどのサードパーティ ライブラリを使用することをお勧めします。

AsyncTask または Simpl3r が好みでない場合。インテント サービスは、アップロード プロセスがアクティビティから完全に切り離されているため、バックグラウンド アップロードに最適なオプションです。アップロードが完了したら、ユーザーがそのアクティビティに戻ったときのために、ローカル ストレージ データを更新できます。

1) アップロードするために画像を変更する必要がある理由はありません。小さいと特に。

2) コールバックしないことをお勧めします。アップロードが完了したら、ローカルで情報を更新できるデータベースなどのローカル ストレージを使用します。アップロードを開始したアクティビティ/フラグメントに戻るときに、AsyncTask/AsyncTaskLoader/CursorLoader などを使用してこのローカル データを読み込むことができます。アプリ内のライブ データを変更するための多くのオプションがあります。

3) 多くのパターンが存在します。私のお気に入りのいくつかをここに挙げます。

于 2013-11-14T23:57:50.500 に答える