我构建了一个应用程序,我使用androidplot库在标签布局中显示多个图表(使用ActionBar标签)
在每个标签上,我在片段中显示单个图表。由于在切换标签时渲染速度很慢(我有一系列3000/4000值),我尝试使用AsyncTask将图形生成放在后台线程中。
它工作正常,但我注意到如果我使用不确定的ProgressBar,指标不会旋转但它仍然保持静止,这意味着有一些进程阻止了UI线程。 (我猜这里)。
您对如何改进我的申请有任何建议吗?我想将ProgressBar显示为加载指示符而不是静止文本
这是AsyncTask代码,我最终使用“Calcurating ...”消息而不是ProgressBar作为解决方法:
private class AsyncPlotTask extends AsyncTask<XYPlot, Void, Boolean> {
@Override
protected void onPreExecute() {
//show loading message only
loading.setVisibility(View.VISIBLE);
dataContainer.setVisibility(View.GONE);
}
@Override
protected Boolean doInBackground(XYPlot... plot) {
boolean success = true;
plot[0].addSeries(dataSeries, dataSeriesFormat);
return success;
}
@Override
protected void onPostExecute(Boolean result) {
//hide loading message and show graph
loading.setVisibility(View.GONE);
dataContainer.setVisibility(View.VISIBLE);
}
}//AsyncPlotTask
答案 0 :(得分:1)
以下是我的意思:
默认情况下,Androidplot使用主线程进行渲染,这对于大多数具有几十个点的绘图都很好,但是如果您经历过需要时间的几千点的绘图。当主线程用于渲染绘图时,UI将不会更新 - 这包括更新进度条。
设置要使用后台模式渲染的绘图应该可以解决问题。如果您使用的是Androidplot 0.5.1或更高版本,则可以通过将其添加到绘图的xml来启用后台渲染线程:
renderMode="use_background_thread"
尼克
答案 1 :(得分:0)
看起来似乎没有一个完美的解决方案
我最终在Activity中有一个ProgressBar实例,每个片段中的另一个实例与Activity一个完全重叠,然后我只是将它们淡入淡出。
“卡住”效应现在可以忽略