如何防止 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();
}
}
});
}
在我的应用程序中,我从 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();
}
}
});
}