我的应用程序的第一个活动是检查数据库并在需要时进行升级。
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(getThemeFromPreferences(this));
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
}
@Override
public void onResume() {
super.onResume();
//Test et remplissage de la BDD
ProgressBar progressBar = (ProgressBar) findViewById(R.id.firstProgressBar);
DatabaseFeeder.testAndFeed(this, progressBar);
//Launch welcoming activity
Intent i = new Intent(this, AccueilActivity.class);
startActivity(i);
}
DatabaseFeeder.testAndFeed静态方法有点慢,因为它从资源读取,因此填充数据库可能需要5秒钟。
问题是:在送纸器完成之前未设置contentView! 我的活动全部为空,持续5秒,然后作为我的内容视图弹出,包括完全填充的进度条。
为什么会这样?
答案 0 :(得分:1)
在异步任务中运行以下代码:
DatabaseFeeder.testAndFeed(this, progressBar);
这将使应用程序主线程可以自由呈现所需的视图。 另外,将长时间运行的操作与应用程序的主线程分开始终是一个好主意。
答案 1 :(得分:1)
这很简单,在你的onCreate()menthod中为你的数据库操作调用一个Asynctask,在onPostExecute()里面,更新你的UI并关闭进度对话框。
背后的原因是,您正在 MainThread 中执行用户界面提交,当您的所有操作完成后,您正在尝试更新用户界面。 数据库操作应该在后台或单独的线程中执行,因此在执行操作时它不会影响主UI线程。