0

私は Android 開発にかなり慣れていないので、キャッチすることがたくさんあります。概念的な質問があります。IOS で行うのはかなり簡単に思えることですが、Android では理解できません。

これが私が達成しようとしていることです:

デバイスの写真を繰り返し処理し、一度に 1 つずつ Web サービスに投稿する必要があります。

  • 画像のアップロード中に、現在アップロード中の写真と現在のアップロードの進行状況バーを画面に表示する必要があります。
  • また、アップロードする写真の総数も表示する必要があります。
  • それに加えて、画面に「現在のアップロードをキャンセル」と「すべて一時停止」という 2 つのボタンが必要です (これらのボタンが何をする必要があるかは一目瞭然です)。

問題は、MediaStore を介して反復している間、現在のスレッドがロックされているように見えることです。メインの UI スレッドでそれを行うと、明らかに画像がアップロードされますが、すべてが完了するまで画面に何も表示されません。アップロードが完了しました。それを克服するために、私は新しい AsyncTask を開始し、そのように反復しようとしています。アップロードには loopj ライブラリを使用しています。これは、アップロードがメイン UI スレッドから開始されたときにのみ非同期にアップロードできます。アップロードは AsychTask が実行されているスレッドから開始されるため、アップロードが完了するまで応答ハンドルを返さない同期クライアントを使用する必要があります。つまり、現在のアップロード操作をキャンセルすることはできません。それを克服するために、私は' m は、AsynchTask イテレータから画像がアップロードされるたびに新しいインテントを生成しようとし、次のインターレータ サイクルに移動するまでそれが返されるのを待ちます。これは恐ろしい外観をしています。 . ああ、私が説明しているソリューションは非常に複雑です。私は確かに、ばかげた単純なものを見落としています。どんなアイデアでも大歓迎です!

PS コードはここにあります: https://github.com/echowaves/Echowaves.android/blob/master/app/src/main/java/com/echowaves/android/UploadProgressActivity.java https://github.com /echowaves/Echowaves.android/blob/master/app/src/main/java/com/echowaves/android/UploadProgressDetailsActivity.java

4

1 に答える 1

0

私はやや実用的な解決策を得ました。アップロードごとに新しいインテントを起動する代わりに、AsynchTask で MediaStore アセットを繰り返し処理し、onProgressUpdate 内で非同期アップロードを開始します。(正しく理解している場合) onProgressUpdate はメイン UI スレッドで動作するため、UI の更新は魅力的な動作をします。 . ただし、アップロードが現在アクティブであることを示すフラグを設定し、100 ミリ秒スリープし、フラグをチェックし、アップロードが完了したら、カーソル内の次の画像に移動するというトリックを実行する必要があります。

最新のコードは github で更新されています: https://github.com/echowaves/Echowaves.android/blob/master/app/src/main/java/com/echowaves/android/UploadProgressActivity.java

于 2014-08-04T00:57:15.410 に答える