Подтвердить что ты не робот

Когда я должен выполнять некоторые операции SQLite в другом потоке (а не в основном потоке)?

В моем приложении Android есть база данных SQLite с классом SQLiteOpenHelper, которая поможет вам в этом. Во время использования приложения пользователь может выполнять некоторые операции, такие как добавление/удаление/обновление и т.д. В базе данных.

В некоторых случаях размер операции будет известен, например:

  • пользователь нажимает кнопку для сохранения элемента
  • SQLiteDatabase выполняет один insert запрос
  • пользователь продолжает использовать приложение

В других областях приложения операция может быть большой, например, вставлять сразу 10 элементов в базу данных.

Вопросы:

  • Должен ли я выполнять простые операции, такие как вставка/обновление/удаление/просмотр 1 элемента?
  • потребуется больше времени, чтобы вставить 1 элемент в таблицу, которая содержит много элементов (например, 30+), чем требуется для вставки в таблицу без элементов?
  • если мне не нужно вставлять такие простые операции, в какой момент вы предлагаете я начать потоки их?

когда я говорю thread, я имею в виду использование потока, который не является основным потоком пользовательского интерфейса.

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

4b9b3361

Ответ 1

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

Если у вас есть невероятно большая база данных, одна операция почти никогда не гарантирует отдельный поток. Базы данных в целом хорошо масштабируются, но, конечно, очень большая база данных (10 000+ строк?) Будет немного медленнее, чем небольшая. 30 строк, однако, ничего.

Я бы начал загружать файлы, если у вас много операций, таких как куча запросов или сложные запросы, которые охватывают несколько таблиц.

Как и все - профайл приложения, и если он слишком медленный, оптимизируйте. Не пишите удивительный синхронизированный супер-пупер с многоядерной обработкой базы данных, если ни один из ваших запросов не занимает больше 2 мс.

Ответ 2

Всегда измерьте перед оптимизацией!

Убедитесь, что операции с БД, которые вы делаете, влияют на работу пользователя, а затем начинают искать решение.

Если материал базы данных замедляется, используйте AsyncTask, который был предназначен для выполнения задач в фоновом режиме, а затем обновить графический интерфейс ПО ВОСТОЧНОМУ ВРЕМЕНИ.

Ответ 3

Абсолютно нет причин использовать здесь нить. Просто верните курсор, извлеките информацию из курсора и верните ее в основное действие.

В частности, нить - это что-то идеально, что будет повторяться до тех пор, пока что-то не произойдет или не истечет время. Поскольку база данных, которую вы используете, я предполагаю, находится по телефону, для ее доступа потребуется практически нулевое время.

Еще одна вещь, которую вы можете сделать, - создать класс Utility, чтобы помочь вашей активности взаимодействовать с базой данных. Это будет то, что ваша деятельность требует взаимодействия с базой данных. В частности, поток управления будет таким:

Активность → Утилита → База данных

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