2014-09-30 4 views
0

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

String sql = "INSERT INTO "+ tableName +" VALUES (?,?,?,?);"; 
    DatabaseHandler dbHandler = new DatabaseHandler(context); 
    final SQLiteDatabase db = dbHandler.getWritableDatabase(); 
     final SQLiteStatement statement = db.compileStatement(sql); 
     db.beginTransaction(); 
     try { 

       statement.clearBindings(); 

       statement.bindString(2, id); 
       statement.bindString(3, type); 
       statement.bindString(4, value); 

       statement.executeInsert(); 

      db.setTransactionSuccessful(); 
     } finally { 
      db.endTransaction(); 
     } 

     db.close(); 

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

спасибо.

+2

«Я пробовал называть мой код вставки в AsyncTask, но тогда вставка занимает очень много времени». Это займет не больше времени, чем требуется блокировка вашего пользовательского интерфейса. – Kiril

+0

есть только 1 вставка сделано здесь. Я сомневаюсь, что это очень долго. – njzk2

+0

Если вы делаете одну транзакцию для каждой вставки, конечно, она будет очень медленной. Переместите 'db.beginTransaction();' и другие вещи из внутреннего цикла и вокруг цикла, который вставляет данные. –

ответ

-1

Я не верю, что вставка будет слишком долго, используя AsyncTask, но если он принимает то даже тогда это лучший подход, то, что вы пытаетесь достичь ..это является "Performing Вставить в база данных для большого объема данных в потоке пользовательского интерфейса ".

  • Ваше приложение может потерпеть крах, если вы выполните эту задачу с длительным сроком выполнения в потоке пользовательского интерфейса.
  • Именно поэтому AsyncTask s были сделаны, чтобы отнять нагрузку от резьбы UI.
  • Вы можете попробовать альтернативную версию IntentService, если вас так раздражает время, которое занимает устройство для выполнения вставки. Он будет продолжать выполнять свою работу на заднем конце, в то время как вы можете выполнять другие задачи.
+0

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

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