Attualmente codifico e decodifico le immagini su Base64. Ho superato il problema iniziale con OOM con l'uso di stream per codificare le immagini in stringhe.Caricamento/download di immagini Android con Base64 in JSON causa Errore memoria insufficiente
Il mio problema ora è che non riesco a capire come aggiungere più stringhe con codifica Base64 per più risoluzioni di immagini (5620 x 3747 - 4,92 MB o 3264 x 1836 - 1,35 MB) a un oggetto JSON tramite Gson. Attualmente Gson lancia un'eccezione OOM solo con 2 stringhe Base64 da un'immagine 5312 x 2988 - 4,95 MB.
Capisco che Android possa risparmiare solo 16/20 Mb per applicazione, quindi questa conversione deve superare il limite.
Come posso scrivere la stringa Base64 in un flusso su un oggetto JSON che conterrà i valori specifici necessari per caricare nel mio server?
Sarebbe più semplice cambiare il mio server per accettare una richiesta di più parti invece di un POJO basato su JSON con più stringhe Base64? Al momento utilizzo Volley e non esiste una richiesta multi-parte ufficiale né lo streaming IO.
Se si tratta di compressione, quanta compressione devo applicare all'immagine prima della codifica in una stringa Base64? Preferisco idealmente perdere ogni qualità, ma ho livelli di compressione ottimali.
qualche informazione in più
sto caricando immagini multiple di risoluzione differenti in quanto è un test per la compatibilità. Ad esempio, tutte le immagini che sto inviando sono state scattate su dispositivi a bassa risoluzione e ad altissima risoluzione poiché la mia app si basa su queste immagini per funzionalità. Sto cercando di dimostrare che qualsiasi immagine (in una certa misura, principalmente immagini acquisite su dispositivi mobili) può essere gestita dalla mia applicazione.
Capisco che alcune immagini potrebbero essere così grandi che caricandole in memoria causeranno delle eccezioni. Questo è qualcosa che proverò a gestire più tardi.
In alcuni casi le immagini che verranno caricati possono estendersi da 1 a 200.
sto cercando di cercare la soluzione più ottimale in grado di scalare bene.
Se si desidera utilizzare Mutipart Request con Volley, IMO, è possibile fare riferimento al mio codice di esempio all'indirizzo https://github.com/ngocchung/VolleyNoApache/blob/master/app/src/main/java/com/example/ volleynoapache/MultipartActivity.java. Nella risposta @ kevinkl3, http://stackoverflow.com/a/16803473/3393666 ho avuto anche una risposta – BNK