2016-05-23 13 views
0

私はAndroidクライアントでretrofit 2.xを使用しています。私の特別な状況では、500を超えるピクチャオブジェクト(実際にはファイル)を非同期にアップロードしたいと考えています。Android:Retrofit:多くの非同期要求を正しく行う方法

pictureListサイズは< 50である場合には、これらすべてのファイルをアップロードすることは問題ありません。

for (Picture pic : pictureList) { 
     uploadPictureAsync(pic) 

しかし、サイズが100以上になったとき、私の試験装置は、次のエラーメッセージで中止されています

ラージ・オブジェクトの割り当てに失敗しました:ashmem_create_regionは「大 オブジェクト空間の割り当て」のため失敗しました:あまりにも多くのファイルを開く

これは、あまりにも多くの非同期要求が原因であるようです。

質問は次のとおりです。このような膨大なリクエストをどのように処理できますか?

+0

これはわかりましたか?私は現在、似たようなことをしています。私は、各asynctaskのコールバックメソッドにasynctasksを作成する必要があると思うと思います。 – 8oh8

+0

遅い応答には申し訳ありません。問題は、複数のAsyncTaskインスタンスで同時にすべての要求をプッシュしたことで、これはデバイスにはあまりにも多くのリクエストでした。それで、私はAsyncTaskの代わりにIntentServiceを変更して1つのファイルをアップロードしました - レスポンスを待つ - レスポンスが到着したら、次のファイルをアップロードしてください。だからそれはもはや並行していません。 – SilverJan

答えて

0

まず、Retrofitサービスを使用する場合、呼び出しを行う必要があるたびに怠惰なインスタンス化を行う代わりに、Retrofitサービスのインスタンスが1つだけあることを確認してください。「開いているファイルが多すぎます"エラー。あなたは、画像のこの量をアップロードする必要がある場合

その後、私はあなたがのBlockingQueueの使用中の非同期呼び出しを管理するThreadPoolExecutorsについてAndroidのドキュメントに従うことをお勧めします。

https://developer.android.com/training/multiple-threads/create-threadpool.html

関連する問題