簡體   English   中英

Android代碼似乎無法同步運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM