如何防止 ProgressBar 卡住?

How to prevent a ProgressBar from sticking?

在我的应用程序中,我从 ion library 的网站上获得了一些 TEXT,我正在使用 progressBar 来显示下载该数据的进度。

但我的主要问题是,在 onComplete 中,我实现了一些与我从网站上获得的 TEXT 一起使用的方法,这些是一些使用大量 for 和其他东西的循环方法实际上我的 progressBar 一开始工作正常,但是当它完成下载数据时 progressBar 只是坚持,直到 onComplete().

中的所有方法都完成

我希望 progressBar 无论如何都能运行,并且在不从 onComplete() 中删除方法的情况下不会卡住,这可能吗?

这是我的函数,我使用了在 onClick() 事件中调用的离子库:

private void getHTML(){
    progressDialog = new SpotsDialog(MainActivity.this, R.style.Custom);
    progressDialog.show();
    Ion.with(getApplicationContext())
            .load("IP")
            .asString()
            .setCallback(new FutureCallback<String>() {
                @SuppressLint("SetTextI18n")
                @Override
                public void onCompleted(Exception e, String result) {
                    htmlresultart = result;
                    htmlresultart = htmlresultart.replace("</td>", "\n");
                    getTable();
                    getHeader();
                    getBody();
                    progressDialog.cancel();
                }
            });

}

如果在 onCompleted() 回调中调用的方法执行时间过长,则它们需要 运行 在后台线程上执行。在这种情况下,使用 Ion 回调没有意义,您应该同步获取数据,然后执行所有其他任务,全部在单个后台线程上进行,如下所示:

private void getHTML(){
    progressDialog = new SpotsDialog(MainActivity.this, R.style.Custom);
    progressDialog.show();
    // start a background thread
    ExecutorService executor = Executors.newSingleThreadExecutor();
    executor.execute(new Runnable() {
         @Override
         public void run() {
            String htmlresultart = null;
            try {  
                 String htmlresultart = Ion.with(getApplicationContext())
                   .load("IP")
                   .asString()
                   .get(); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
            // if htmlresultart is null at this point, an exception occured and the string couldn't be fetched so you most likely should abort the following processing.
            if (htmlresultart != null) {
                htmlresultart = htmlresultart.replace("</td>", "\n");
                getTable();
                getHeader();
                getBody();
                progressDialog.cancel();
            }
         }
    });        
}