我想知道为什么我的Android代码没有同步运行。
我正在重写Cordova的Mainactivity
班级onCreate
,以便在应用启动时执行自定义代码。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 1. Show loading dialog
Display display = getWindowManager().getDefaultDisplay();
Dialog loadingDialog = Loading.createLoadingDialog(this, display, getLoadingHTMLPath());
loadingDialog.show();
loadUrl(launchUrl);
// 2. Copy bunch of files (this takes some time)
copyFiles();
}
我希望应用首先显示加载对话框,然后复制文件。但是,我在应用程序启动时看到黑屏。然后该应用程序复制所有文件。只有在此之后,应用程序才会显示加载对话框。
为什么代码的第二部分首先运行?有关如何让对话框首先显示的任何建议吗?
修改的
这是我最初的解决方案。
Thread onAppStartTask = new Thread(new Runnable() {
public void run() {
copyFiles();
}
});
onAppStartTask.start();
答案 0 :(得分:2)
嗯,问题是,您正在同步运行代码。这就是问题所在。 Android只有一个用于显示和修改UI的线程,因此调用copyFiles()
将阻止UI中的任何进一步操作,直到完成。
show()
来电不会立即发生 - onStart()
和onResume()
需要先被调用 - 并且屏幕变黑,因为它无法绘制您的应用停留在onCreate()
时的任何内容。强烈推荐的解决方案是将文件加载逻辑放在后台线程中,并定期更新ui及其进度。
为初学者试一试,看看它是否有效。
cordovaInterface.getThreadPool().execute(new Runnable() {
@Override
public void run() {
copyFiles();
}
}