Как выполнить продолжительную задачу при запуске приложения? [Android, Java]

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

Для этого в onCreate() добавил функцию, которая конвертирует все данные при запуске приложения. Проблема в том, что конвертация может занять несколько секунд, поэтому нужно показывать AlertDialog. Но программа продолжат своё выполнение и считывает данные раньше, чем они были сконвертированы.

public void onCreate(Bundle savedInstanceState) {
   ///...
   convertDataInDB();
   //Как здесь остановить дальнейший запуск приложения до 
   //завершения конвертации? Иначе оно начинает работать 
   //со старыми неконвертированными данными.
}

public void convertDataInDB() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(false); 
    builder.setView(R.layout.progress_dialog);
    AlertDialog dialog = builder.create();
    dialog.show();

    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            db.convertData();
        }
    });
    t.start();  
}

Подскажите, пожалуйста, как это правильно реализовать?


Ответы (1 шт):

Автор решения: Eugene Krivenja

Примерно так (код условный)

public void onCreate(Bundle savedInstanceState) {
  setContentView(R.layout.please_wait_screen);

  Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        db.convertData();
        runUiThread {
            setContentView(R.layout.activity_screen);
            continueAfterDbConvertion();
        }
    }
  });
  t.start();
}

private void continueAfterDbConvertion() {
  /// дальнейший запуск приложения ...
}
→ Ссылка