Android setContentView 和计算

Android setContentView and computing

我的应用程序的第一个 activity 正在检查数据库并在需要时升级它。

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

为什么会这样?

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

 DatabaseFeeder.testAndFeed(this, progressBar);

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

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

Reason behind is that , you are performing UI updets in your MainThread ,when ever your all operations will done, you are trying to update your UI . Database operation should be perform inside background or separate thread ,so it can not effect your main UI thread while performing your operation.