Мне нужно сделать массивное манипулирование sql (слишком много вставок) в начале приложения. У меня такой заставка.Рабочий класс вне ui thread
public class SplashScreen extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
@Override
protected void onResume() {
super.onResume();
...
new SetupDataBaseWorker(this).execute();
}
private class SetupDataBaseWorker extends AsyncTask<Void, Void, Void> {
private SqliteManager db_sql;
private Activity activity;
public SetupDataBaseWorker(Activity activity) {
this.activity = activity;
db_sql = new SqliteManager(this.activity);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
...
showDialogLoading();
...
}
@Override
protected Void doInBackground(Void... urls) {
...
db_sql.inserting();
...
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
this.activity.startActivity(new Intent(SplashScreen.this, MainActivity.class));
this.activity.finish();
}
}
}
1- Всегда на первом работает (после установки), я получил пустой экран в течение 10 секунд (я предполагаю, что это скрипт работает ...), и после того, как мое приложение переходит к mainActivity.
2- Если я запустил приложение во второй раз, он отображает пустой экран в течение 1 секунды и переходит к MainActivity (даже не отображает компоновку SplashScreen). Кажется, что рабочий класс не работает за пределами нити ui ... Что я должен сделать, чтобы это сделать? Я уже пробовал поставить этого работника на Службу, но все тот же.
В onResume() вы используете 'SetupDataBaseWorker(). Execute();' и не этот 'new SetupDataBaseWorker (this) .execute();' и это не называется 'db_sql = new SqliteManager (this.activity), или я ошибаюсь? – michoprogrammer
'showDialogLoading' работает этот метод и фактически показывает диалог загрузки? – njzk2
Ребята, это * абстракция * ... Весь код работает – PMateus