[英]Android code does not seem to run synchronously
我想知道為什么我的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();
好吧,事實是,您正在同步運行代碼。 那就是問題所在。 Android僅具有一個用於顯示和修改UI的線程,因此對copyFiles()
的調用將阻止UI中的任何進一步操作,直到完成為止。
show()
調用不會立即發生-需要先調用onStart()
和onResume()
-屏幕變黑,因為當應用程序停留在onCreate()
它無法繪制任何內容。 強烈推薦的解決方案是將文件加載邏輯放在后台線程中,並根據其進度定期更新ui。
初學者可以嘗試一下,看看是否可行。
cordovaInterface.getThreadPool().execute(new Runnable() {
@Override
public void run() {
copyFiles();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.