0

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

@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 秒来填充数据库。

问题是:在 feeder 完成之前没有设置 contentView !我的活动全部空白 5 秒钟,然后作为我的内容视图弹出,包括完全填充的进度条。

为什么呢 ?

4

2 回答 2

1

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

 DatabaseFeeder.testAndFeed(this, progressBar);

这将使应用程序主线程保持空闲以呈现所需的视图。此外,将长时间运行的操作与应用程序的主线程分开总是一个好主意。

于 2015-10-16T12:48:29.257 回答
1

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

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

于 2015-10-16T12:52:07.933 回答