Android setContentView和计算

时间:2015-10-16 12:40:13

标签: android android-progressbar setcontentview

我的应用程序的第一个活动是检查数据库并在需要时进行升级。

@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秒,然后作为我的内容视图弹出,包括完全填充的进度条。

为什么会这样?

2 个答案:

答案 0 :(得分:1)

在异步任务中运行以下代码:

 DatabaseFeeder.testAndFeed(this, progressBar);

这将使应用程序主线程可以自由呈现所需的视图。 另外,将长时间运行的操作与应用程序的主线程分开始终是一个好主意。

答案 1 :(得分:1)

这很简单,在你的onCreate()menthod中为你的数据库操作调用一个Asynctask,在onPostExecute()里面,更新你的UI并关闭进度对话框。

  

背后的原因是,您正在 MainThread 中执行用户界面提交,当您的所有操作完成后,您正在尝试更新用户界面。   数据库操作应该在后台或单独的线程中执行,因此在执行操作时它不会影响主UI线程。