Как выполнить продолжительную задачу при запуске приложения? [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() {
/// дальнейший запуск приложения ...
}