Sto cercando di creare un'applicazione che utilizza per scaricare l'immagine dal server e mostrarlo in ListView. Il problema che ho fatto è stata la perdita di memoria e rendere l'applicazione in crash. Stavo cercando nel blog Android come questo link, mostra una grande idea ma non è ancora abbastanza per farlo con thread multipli. Alcuni dispositivi Android possono funzionare con esso, ma alcuni dispositivi possono gestire solo nel thread singolo e, a volte, non possono funzionare affatto.immagine Android da server e salvare sdcard senza utilizzare BitmapFactory
La mia applicazione ha molte attività e ognuno di loro ha un controllo ListView che hanno bisogno di visualizzare l'immagine più velocemente possibile. Attraverso Google IO 2012 usano il buffer per salvare l'immagine originale su scheda SD e risolve il problema. La memoria di perdita, ma rende il caricamento così lento poiché l'immagine che deve essere scaricata è troppo grande.
La mia domanda è: Esiste un modo per scalare immagine insieme immagine scrittura su scheda SD con? ho dato qualche possibile soluzione è quella di utilizzare byte Skip nell'oggetto InputStream e sono stato in grado di trovare larghezza e l'altezza anche bit per pixel dell'immagine che ho bisogno di scaricare.
Il seguente codice è stato l'uso in Google IO 2012 e lavorare bene con filettatura multipla, nel mio caso ho 4 filo in esecuzione in background.
private void downloadAndWriteFile(final String url, final File file) throws OutOfMemoryError {
BufferedOutputStream out = null;
try {
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setDoInput(true);
conn.connect();
final InputStream in = new BufferedInputStream(conn.getInputStream(), IO_BUFFER_SIZE_BYTES); // buffer size 1KB
out = new BufferedOutputStream(new FileOutputStream(file), IO_BUFFER_SIZE_BYTES);
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
out.close();
conn.disconnect();
}
catch (Exception e) {
Log.e(TAG, "!!downloadAndWriteFile " + e.getMessage());
file.delete();
}
}
Grazie per la tua risposta, ero già in questo caso ma si ottiene ancora la memoria di perdita con thread multipli per alcuni dispositivi che non consentono a JNI di allocare più memoria. Il codice di Google IO 2012 può farlo funzionare con thread multipli che supportano tutti i dispositivi, ma è così lento nel caso in cui l'immagine sia troppo grande. In qualche modo, l'utente naviga rapidamente in modo che, per la prima volta, non funzioni affatto. – vsatkh