Лучшая практика, чтобы показать контакты Android + номера телефонов - PullRequest
7 голосов
/ 20 июля 2011

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

  • Используйте CursorAdapter с курсором контактов и выполняйте запрос телефонных номеров при вызове bindView для каждой строки
  • Скопируйте все контакты и телефонные номера в массив в памяти в фоновом потоке, а затем покажите их с помощью ArrayAdapter.
  • Другие решения?

Ответы [ 4 ]

1 голос
/ 02 сентября 2011

Я думаю, это будет зависеть от трех факторов:

  1. Сколько контактов мы говорим здесь?
  2. Сколько времени занимает загрузка каждого контакта?(Например, у вас очень сложное представление, которое нужно надувать, или вы получаете изображения контактов / и т. Д., Которые требуют какого-либо сетевого ввода-вывода?)
  3. Сколько контактов показывают пользователю одновременно?

Ваше решение подойдет для большинства случаев, хотя второе решение также предлагает некоторые преимущества:

Решение 1:

Преимущество:

  1. Задержка инфляции в представлении «вид по ходу» может работать хорошо, когда это достаточно быстро, чтобы раздувать представления без каких-либо заметных сбоев пользовательского интерфейса.

Недостаток:

  1. Если ваши контакты связаны с большим количеством данных и требуют некоторой сложной инфляции, вы можете заметить задержку.

  2. Менее гибкий и расширяемый по сравнению с решением 2. Как обсуждается ниже.

Решение 2:

Преимущество:

  1. У вас есть контроль над всеми шагами, так что вы можете легко смоделировать его так же просто, как один, но добавлять вещи может быть проще: поиск по всей памяти, пользовательская сортировка массива и т. Д. Они работают лучше, когда у вас есть все вопросымассив, который уже там.Или, если вы хотите выполнить пользовательскую загрузку позже или добавить дополнительные данные о контактах, которые требуют дополнительной обработки (например, сетевой ввод / вывод), это может быть немного проще, чем переход курсора.

Недостаток:

  1. Выполнение: это не учебник, как это сделать.чтобы сделать вещи более индивидуальными, вам потребуется хорошо обрабатывать все потоки и хорошо обрабатывать первоначальный вид.Убедитесь, что он масштабируется.

Так что, в зависимости от того, над чем именно вы работаете, выберите подходящий.

1 голос
/ 30 августа 2011

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

Поэтому я предлагаю вам сначала внести фиксированное число контактов с помощью массива в памяти в фоновом потоке, например, в первые 20. Также, если вы считаете, что ваше приложение выполнит более одного запроса к этой службе. было бы здорово использовать кеширование. Наихудшим подходом должно быть снова и снова звонить в службу контактов Затем для запроса на контакт № 21 можно привести следующие 20 и так далее.

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

0 голосов
/ 05 сентября 2011

Я думаю, что CursorAdapter - лучшее решение.

Также убедитесь, что вы смотрите это видео http://www.youtube.com/watch?v=wDBM6wVEO70 В нем говорится об оптимизации, которая, на мой взгляд, необходима для плавной прокрутки списка.

0 голосов
/ 31 августа 2011

Я думаю http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/ будет вариант. Где вы можете найти все объекты, которые вы хотите ...

...