2012-07-25 2 views
0

Сейчас у меня есть несколько классов, которые отвечают за сохранение растровых изображений внутренней памяти, которые затем перечислены в ListViews.Лучший способ хранения растровых изображений

После перечисления прибегните к методу, указывающему, какое имя изображения вы хотите вернуть и получите соответствующее растровое изображение.

Когда приложение запускается, загрузите в память (HashMap) все необходимые вам изображения, как только вы загрузите изображение из внутренней памяти непосредственно в список, процесс занимает много времени.

Я использую повторное использование видов, и каждый элемент имеет два и два изображения в виде изображений. Тем не менее, щебень очень медленный и имеет большое отставание.

Это хорошее решение для хранения изображений в памяти (hashmap)? Для загрузки в память во время списка еще медленнее. Изображения имеют 100x100 пикселей.

Мой вопрос: Моя проблема с задержкой может иметь отношение к тому, что все изображения находятся в памяти? Какое лучшее решение?

EDIT:

07-25 16:56:33.195: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.195: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.203: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.203: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.210: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.257: V/ADAPTER(8648): recicling view [16] 
07-25 16:56:33.265: V/ADAPTER(8648): recicling view [15] 
07-25 16:56:33.273: V/ADAPTER(8648): recicling view [14] 
07-25 16:56:33.281: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.289: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.289: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.289: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.296: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.296: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.304: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.312: V/ADAPTER(8648): recicling view [7] 
07-25 16:56:33.320: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.328: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.328: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.335: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.335: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.343: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.343: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.359: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.359: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.367: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.367: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.367: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.375: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.382: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.398: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.398: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.406: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.406: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.414: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.414: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.484: V/ADAPTER(8648): recicling view [13] 
07-25 16:56:33.492: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.500: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.500: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.507: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.507: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.507: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.515: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.523: V/ADAPTER(8648): recicling view [7] 
07-25 16:56:33.531: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.539: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.539: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.546: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.546: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.554: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.554: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.562: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.570: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.578: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.578: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.578: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.585: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.585: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.609: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.609: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.617: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.617: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.625: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.625: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.679: V/ADAPTER(8648): recicling view [12] 
07-25 16:56:33.687: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.695: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.695: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.703: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.703: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.710: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.710: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.718: V/ADAPTER(8648): recicling view [7] 
07-25 16:56:33.734: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.734: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.742: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.742: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.750: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.750: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.757: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.765: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.773: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.773: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.773: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.781: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.781: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.789: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.804: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.812: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.812: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.812: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.820: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.820: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.875: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.882: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.890: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.890: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.898: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.898: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.906: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.914: V/ADAPTER(8648): recicling view [7] 
07-25 16:56:33.929: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.929: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.937: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.937: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.945: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.953: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.953: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.968: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.976: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.976: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.976: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.984: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.984: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.992: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:34.007: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:34.015: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:34.015: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:34.015: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:34.023: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:34.031: V/ADAPTER(8648): recicling view [5] 

Всякий раз, когда я прокручиваю (список можно продолжить), я получаю этот выход. где содержание внутри [] соответствует позиции. Разве не странно, что он постоянно показывает позицию 0-6?

EDIT

Теперь обнаружил возможную причину.

В настоящее время я являюсь tab_activity, где есть все необходимые виды. В xml добавлена ​​tab_activity top_bar, где у меня есть изображение, которое постоянно изменяется. Когда изображение находится в автоматическом режиме (постоянно изменяется), ListViews, находящиеся внутри вкладки, «перекрашены», следовательно, отставание.

Я пользуюсь услугой (музыкой), которая меняет образ x в x раз.

Почему ListViews перекрашивается, когда я просматриваю изображение, перекрашивается?

+0

ли ваши изображения имеют большие размеры файлов? И находятся ли они в поддерживаемом оптимизированном формате? .png рекомендуется –

+0

fos = openFileOutput (имя, Context.MODE_PRIVATE); bitmap.compress (CompressFormat.JPEG, 90, fos); Я использую JPEG для сохранения изображений, не так ли? И я использую: bitmap = BitmapFactory.decodeStream (fis); для получения изображения из внутреннего хранилища – marceloamx

ответ

0

Я не уверен, что загрузка изображений вызывает задержку, но если это так, то я предлагаю вам создать какой-то пользовательский интерфейс, который сообщает пользователю, что изображения загружаются. (Для того, чтобы проверить погоду изображений вызывают отставание, я предлагаю вам взглянуть на DDMS просто войти с LogCat)

Я использую следующий код для сохранения растровых изображений в памяти:

Ниже будет запись в память:

public void writeBitmapToMemory(String filename, Bitmap bitmap) { 
     FileOutputStream fos; 
     // Use the compress method on the Bitmap object to write image to the OutputStream 
     try { 
      fos = game.openFileOutput(filename, Context.MODE_PRIVATE); 
      // Writing the bitmap to the output stream 
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); 
      fos.close(); 
      // this.gameEngineLog.d(classTAG, "Bitmap successfully written: " + filename); 
     } 
     catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      // this.gameEngineLog.d(classTAG, "Bitmap couldn't be written: " + filename); 

     } 
     catch (IOException e) { 
      e.printStackTrace(); 
      // this.gameEngineLog.d(classTAG, "Bitmap couldn't be written: " + filename); 

     } 

    } 

это будет читать из памяти:

public Bitmap readBitmapFromMemory(String filename) { 
     Bitmap defautBitmap = null; 
     File filePath = game.getFileStreamPath(filename); 
     FileInputStream fi; 
     try { 
      fi = new FileInputStream(filePath); 
      defautBitmap = BitmapFactory.decodeStream(fi); 
      // this.gameEngineLog.d(classTAG, "Bitmap successfully read: " + filename); 
     } 
     catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      // this.gameEngineLog.d(classTAG, "Bitmap couldn't be opened: " + filename); 
     } 

     return defautBitmap; 

    } 
Смежные вопросы