2013-03-23 3 views
2

Я работаю над приложением для музыкального плеера для Android и стараюсь найти лучший способ работы с изображениями. Я загружаю изображения художника из Интернета и изображения альбомов либо из MediaStore, либо из Интернета в зависимости от обстоятельств. Мне нужно будет добавить либо набор изображений (исполнителя или альбома) в listViews в разное время.Самый эффективный способ работы с большим количеством изображений в Android

Хранение изображений в памяти (HashTable) сделает загрузку очень быстрой, но может стать непрактичной, если у пользователя есть очень большая музыкальная библиотека.

Однако я не могу загрузить их по мере необходимости, потому что мне нужно привязать их к спискуView. Кроме того, у меня есть уведомление, которое отображает изображение исполнителя и предоставляет элементы управления навигацией. Если я подожду, чтобы загрузить изображение, когда пользователь нажимает на следующую кнопку, он может не загружаться до обновления уведомления уведомления.

Лучше всего подключиться к сети при первой загрузке, а затем сохранить файлы локально, а затем загрузить их по мере необходимости? Если я сделаю так, будет ли изображение загружено достаточно быстро, чтобы не отставать от пользователя, быстро нажимая следующую кнопку и обновляя представление изображения художника?

Спасибо,

ответ

1

Используйте представление списка или сетку для отображения изображений.

Вы можете использовать Универсальный загрузчик изображений для загрузки изображений либо в MediaStore, либо из Интернета. Использует кеширование. На основе Lazy Loading, но имеет больше параметров конфигурации.

В вас адаптер застройщик

File cacheDir = StorageUtils.getOwnCacheDirectory(a, "UniversalImageLoader/Cache"); 


// Get singletone instance of ImageLoader 
    imageLoader = ImageLoader.getInstance(); 
// Create configuration for ImageLoader (all options are optional) 
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a) 
       // You can pass your own memory cache implementation 
      .discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation 
      .discCacheFileNameGenerator(new HashCodeFileNameGenerator()) 
      .enableLogging() 
      .build(); 
// Initialize ImageLoader with created configuration. Do it once. 
    imageLoader.init(config); 
    options = new DisplayImageOptions.Builder() 
    .showStubImage(R.drawable.stub_id)//dummy image 
    .cacheInMemory() 
    .cacheOnDisc() 
    .displayer(new RoundedBitmapDisplayer(20)) 
    .build(); 

В вашем GetView()

 ImageView image=(ImageView)vi.findViewById(R.id.imageview); 
     imageLoader.displayImage(imageurl, image,options); 

Вы можете также использовать https://github.com/thest1/LazyList. Также используется кеширование.

Также используйте ViewHolder в listview или grdiview. http://developer.android.com/training/improving-layouts/smooth-scrolling.html.

+0

@ user2167861 попробуйте универсальный загрузчик изображений – Raghunandan

+0

Thanks Raghunandan. Пара занимается вопросами. – user2167861

+0

1) Как работает кеширование? Сохраняет ли это копию локально? 2) Вы предлагаете сохранять все изображения локально на ранней стадии процесса или просто загружать их из Интернета по мере необходимости? – user2167861

0

Загрузите изображения с локального хранения файлов или MediaStore в getView() функции вашего ListView'sListAdapter или SimpleListAdapter. Адаптер позаботится о вызове только getView(), если необходимо, для предметов, необходимых для position. Ваша система будет достаточно быстрой, чтобы загружать изображения таким образом, когда они понадобятся.

Вам нужно будет получить все изображения из Интернета в более раннее время и сохранить их в локальной файловой системе, чтобы они были доступны для отображения по ListView.

+0

Спасибо Дэвиду! Когда я сохраняю изображения альбомов локально, должен ли я просто сохранить их в папку или обновить MediaStore? – user2167861

+0

Существует несколько мест для сохранения изображений ваших альбомов, включая локальную файловую систему («Внутреннее хранилище», т. Е. Вашу песочницу), SD-карту (она не гарантирована и доступна), а также MediaStore (также общедоступна). Я рекомендую первый метод, если вам не нужны изображения, размещенные вне вашего приложения, или у вас есть много МБ, которые будут перегружать доступное внутреннее хранилище. Путь жестко привязан к «openFileStream()» в любой активности Android. Все варианты хранения обсуждаются здесь: http://developer.android.com/guide/topics/data/data-storage.html –

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