Должен ли я выполнять вставку, удаление, обновление в моей собственной базе данных SQLite внутри AsyncTaskLoader

Я прочитал много сообщений, в которых говорилось, что длинные операции (например, чтение БД) не должны выполняться в основном потоке.

До сих пор я использовал CursorLoader (для «чтения» ContentResolver) и AsynkTaskLoader (для «чтения» моей собственной базы данных SQLite).

Я знаю, что для выполнения Insert, Delete и Update "на" ContentResolver я могу использовать AsyncQueryHandler.

Мой вопрос: как лучше всего выполнить Insert, Delete и Update на моей собственной базе данных SQLite??

Должен ли я просто выполнять эти операции внутри метода loadInBackground() из AsyncTaskLoader?

Спасибо


person MDP    schedule 25.08.2017    source источник
comment
Используйте AsyncTask и выполняйте обновления в методе doInBackground. Но если ваши обновления легкие и быстрые, вы можете свободно выполнять их в потоке пользовательского интерфейса и немного облегчить себе жизнь.   -  person Dusan    schedule 25.08.2017
comment
Спасибо, мужик :)   -  person MDP    schedule 25.08.2017
comment
Даже медленные устройства способны выполнять пару сотен простых операций с БД в секунду, поэтому нет смысла выполнять одну или несколько операций в фоновом режиме. stackoverflow.com/questions/28188164/android-sqlite-performance   -  person Dusan    schedule 25.08.2017


Ответы (2)


Если ваши запросы просты и их выполнение не займет много времени, вы можете просто использовать их в самом основном потоке.

Если вы занимаетесь обработкой больших данных, у вас есть два варианта.

  1. Асинхронная задача:

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

2.Тема

Если нет цели обновлять пользовательский интерфейс после операции, вы можете просто использовать для этого Thread.

person Bhuvanesh BS    schedule 25.08.2017
comment
Спасибо, мужик. Что оценивается в процессе обработки больших данных для мобильных устройств? сохранение/удаление/обновление 100 записей? 1.000? 1000.000? - person MDP; 25.08.2017
comment
Я не буду использовать основной поток, если мне нужно запросить более 20 записей. - person Bhuvanesh BS; 25.08.2017
comment
Я не знаю точных цифр. Но дело не в цифрах, а во времени выполнения. - person Bhuvanesh BS; 25.08.2017
comment
Еще раз спасибо :) - person MDP; 25.08.2017

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

private Handler mHandler = null;  // global variable
private HandlerThread mHandlerThread = null; // global variable

// Создайте экземпляр внутри onCreate() или в другом месте внутри вашего кода, чтобы он назывался вашим. Также вы можете сделать его одноэлементным, если это необходимо, но это неправильный путь.

    mHandlerThread = new HandlerThread("HandlerThread");
    mHandlerThread.start();
    mHandler = new Handler(mHandlerThread.getLooper());

// выполняем фоновую операцию, например:

handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                       // Do background work here.

                   }
                }, 2000);
person Jitesh Mohite    schedule 25.08.2017