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.
我的应用程序的第一个 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.