Добрый день, ситуация такая:
Есть сервис, он скачивает изображения с сервера и сохраняет в кэш. Изображений примерно на 400Кб, но памяти отъедает раз в 10-15 больше. Подскажите, правильно ли я их скачиваю и сохраняю?
В коде сервиса скачиваю в методе downloadImages, получаю имена изображений, проверяю была ли картинка уже загружена, если нет, то скачиваю и сохраняю:
...
private boolean downloadImages() {
...
String[] imageNames = data[0].split("\\s*" + Config.DATA_IMAGE_NAMES_SEP + "\\s*");
for(String imgName : imageNames) {
if(CacheManager.getInstance(this).getImage(imgName) == null) {
Bitmap image = getBitmap(Config.SERVER_URL + imgName);
CacheManager.getInstance(this).saveImage(imgName, image);
}
}
...
}
private Bitmap getBitmap(String aUrl) throws IOException {
try {
byte[] bitmapBytes = getUrlBytes(aUrl);
return BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length);
} catch (IOException ioe) {
return null;
}
}
private byte[] getUrlBytes(String aUrl) throws IOException {
final HttpParams httpParams = new BasicHttpParams();
HttpClient client = new DefaultHttpClient(httpParams);
HttpGet request = new HttpGet(aUrl);
request.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0");
request.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request.setHeader("Accept-Language", "ru,en-us;q=0.7,en;q=0.3");
request.setHeader("Accept-Charset", "windows-1251,utf-8;q=0.7,*;q=0.7");
HttpResponse response = client.execute(request);
ByteArrayOutputStream out = new ByteArrayOutputStream();
InputStream in = response.getEntity().getContent();
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = in.read(buffer)) > 0) {
out.write(buffer, 0, bytesRead);
}
out.close();
return out.toByteArray();
}
Полученное изображение сохраняю в кэш в методе saveImage:
private CacheManager(Context context) {
mContext = context;
mLRU = new LruCache<Object, Object>(1024);
loadImagesFromCacheToLRU();
}
public void saveImage(String aName, Bitmap aImage) {
String filePath = mContext.getCacheDir().getAbsolutePath() + "/" + RESOURCE_IMAGES_PREFIX + aName;
File file = new File(filePath);
if(!file.exists()) {
try {
FileOutputStream fos = new FileOutputStream(filePath);
aImage.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (IOException e) {
Log.e(TAG, "Cannot save image to cache! " + e.getMessage());
}
}
mLRU.put(aName, aImage);
}
public Bitmap getImage(String aName) {
return (Bitmap) mLRU.get(aName);
}
Все ли верно в этих кусках кода?