Fuera de memoria usando Retrofit 2 para descargar un archivo

Tengo una aplicación de visor de pdf donde tengo que descargar archivos pdf grandes (136 MB por ejemplo) Estoy utilizando retrofit2-beta2 para este proceso. El problema es que siempre me quedo sin memoria. ¿Cómo puedo decir retrofit que voy a descargar un archivo grande, por favor, sólo dar el byteStream para mí?

Mi interfaz es:

@GET("url") Call<ResponseBody> getData(params); 

Tengo una clase de ProgressResponseBody que está ampliando el ResponseBody y estoy fijando un progressListener aquí, poder refrescar mi progressbar,

Y en la función onResponse recibo el InputStream como

 InputStream input = response.body().byteStream(); FileOutputStream out = new FileOutputStream(file); int bufferSize=1024; byte[] buffer = new byte[bufferSize]; int len = 0; while (len = input.read(buffer) != -1) { out.write(buffer,0,len); } if(out!=null) out.close(); 

ACTUALIZAR

He añadido el @Stream a la interfaz pero ahora tengo NetworkOnMainThreadException en el ProgressResponseBody.java El error se lanza en el super.read (sink, byteCount); fila. ¿Cómo podría poner esto a un hilo separado?

 @Override public BufferedSource source() throws IOException { if (bufferedSource == null) { bufferedSource = Okio.buffer(source(responseBody.source())); } return bufferedSource; } private Source source(Source source) { return new ForwardingSource(source) { long totalBytesRead = 0L; @Override public long read(Buffer sink, long byteCount) throws IOException { long bytesRead = super.read(sink, byteCount); totalBytesRead += bytesRead != -1 ? bytesRead : 0; progressListener.update(totalBytesRead, responseBody.contentLength(), bytesRead == -1); return bytesRead; } }; } 

Agregue la anotación @Streaming a su llamada para recuperar el ResponseBody procesar.

 @Streaming @GET("url") Call<ResponseBody> getData(params); 
  • Programación de Android - Publicar formulario de Google / Spreedsheet (REQUIRED FIELD)
  • Proguard eliminando anotaciones en la aplicación de Android
  • Uso del patrón de diseño Singleton para SQLiteDatabase
  • Almacenamiento de clave secreta en KeyStore sin el parámetro ProtectionParameter
  • Manera de almacenar un diccionario grande con poca huella de memoria + búsquedas rápidas (en Android)
  • Cómo Hash String usando SHA-1 con la clave?
  • ¿Cómo obtengo las preferencias compartidas en Asynctask?
  • Barra de acción Sherlock 4 color del texto del título - donde me estoy yendo mal?
  • Obtenga la latitud y longitud desde el nombre de la dirección dada. NO Geocoder
  • Logcat rellenado con java.io.IOException: Mensajes de rechazo de conexión
  • ¿Qué clase debo usar para Date's en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.