0

В моем приложении для Android у меня есть локальная БД (SQLite), в которой приложение должно запрашивать данные. Запрос может занять много времени (> 5 секунд), поэтому я избегаю использовать для этого основной поток пользовательского интерфейса. Возвращенные данные также могут быть довольно большими (> 1 МБ).Лучшая практика проектирования Android для доступа к SQLiteDatabase

Между AsyncTasks, Threads, ExecutorService и IntentService (и, возможно, больше), какой лучший класс/API для использования в Android для этого? Все они более или менее одинаковы с точки зрения того, что они предлагают? Или есть явный победитель и более подходящий класс для доступа к базе данных?

+0

Я думаю, что это довольно основанный на мнениях, но в настоящее время предпочтительным вариантом является использование класса «Loader» (т. Е. 'CursorLoader') –

ответ

1

Ответ, я уверен, что вы можете предсказать, «это зависит».

Если вы пишете набор связанных вызовов (например, которые будут синхронизировать вашу базу данных с помощью API), тогда я хотел бы использовать IntentService, поскольку это длительная работа, не связанная напрямую с вашим пользовательским интерфейсом.

Если вы используете одноразовую операцию, попав в базу данных, чтобы получить набор результатов, я бы наклонился к фрейму загрузчика/CursorLoader, чтобы получить данные для вашего пользовательского интерфейса. AsyncTask - вариант, хотя это действительно более универсальный механизм нарезки. Кроме того, рассмотрите структуру ORM, которая работает с потоками или поддерживает очередь рабочих элементов для вас.

Я не могу думать о случае, когда управление потоком напрямую было бы лучшим вариантом. Это очень низкий уровень и много места для ошибок, когда над ним есть более красивые абстракции.

+0

. Что относительно' Loaders'? –

+0

Да, хорошо, не знаю, как я забыл об этом! Я обновил свой ответ –

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