Android代码似乎无法同步运行

时间:2015-11-09 01:04:13

标签: android cordova

我想知道为什么我的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();

1 个答案:

答案 0 :(得分:2)

嗯,问题是,您正在同步运行代码。这就是问题所在。 Android只有一个用于显示和修改UI的线程,因此调用copyFiles()将阻止UI中的任何进一步操作,直到完成。

show()来电不会立即发生 - onStart()onResume()需要先被调用 - 并且屏幕变黑,因为它无法绘制您的应用停留在onCreate()时的任何内容。强烈推荐的解决方案是将文件加载逻辑放在后台线程中,并定期更新ui及其进度。

为初学者试一试,看看它是否有效。

cordovaInterface.getThreadPool().execute(new Runnable() {
    @Override
    public void run() {
        copyFiles();
    }
}