Лучшая практика для показа контактов Android + телефонных номеров

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

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

Solutions Collecting From Web of "Лучшая практика для показа контактов Android + телефонных номеров"

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

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

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

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

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

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

Решение 1:

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

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

Недостаток:

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

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

Решение 2:

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

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

Недостаток:

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

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

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

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

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