UI-下载数据时线程似乎滞后

UI-Thread seems to lag when downloading data

所以我开始构建一个应用程序,我已经在我的计算机上使用 JavaFX 为 android 编写了该应用程序。我对 android 几乎是全新的。

我现在苦恼的是顺利下载一个文件。

我的 MyActivity.java class 中有以下代码:

/**
 * Called when the user clicks the getWebsite button
 */
public void getWebsite(View view) {

    WebReader web = new WebReader(URL);
    Thread webThread = new Thread(web);
    webThread.start();
    try {
        webThread.join();
        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(web.getWebsite());
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

WebReader 实现了 Runnable。在 public void run() 上调用了以下方法:

 private void getWebsite(String URL) {
    BufferedReader in = null;
    String line = "";
    java.net.URL myUrl = null;
    try {
        myUrl = new URL(URL);
    in = new BufferedReader(new InputStreamReader(myUrl.openStream(), "UTF-8"));
    while ((line = in.readLine()) != null) {
        toReturn = toReturn + "\n" + line;
    }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

一切正常,我得到网站文本(而不是 link 指向的文件中的文本 - 它是从 Google 驱动器直接下载 link)显示在我的 TextView.

但是: 按下按钮的动画与文本同时出现,所以在我实际按下按钮后大约 1 秒。 我猜 我在下载文件时仍然以某种方式让 UI-线程休眠。

如何让按钮在按下时显示动画?

PS:我尝试使用 intends,但无法将数据从 Downloading Intent 传输到 UI...如果有人有时间和精力得到一个有计划的解决方案,我会更乐意尝试理解和实施它!

PPS:如果您对这段代码还有其他不满意的地方(线程问题、不良风格等),请随时告诉我。 批评是自学的唯一途径!

这是滞后的,因为您正在阻塞 UI 线程,直到您的 webThread 使用 webThread.join(); 完成。

考虑改用 AsyncTask。它有一个方法doInBackground(),你可以覆盖它来完成你所有的后台工作,然后一旦完成你就可以用onPostExecute(Result)中的结果更新你的TextView,因为那是运行 UI 给你的帖子。