尽管AsyncTask不确定ProgressBar卡住了(不旋转)

时间:2013-04-15 08:58:38

标签: android android-asynctask androidplot

我构建了一个应用程序,我使用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

2 个答案:

答案 0 :(得分:1)

以下是我的意思:

默认情况下,Androidplot使用主线程进行渲染,这对于大多数具有几十个点的绘图都很好,但是如果您经历过需要时间的几千点的绘图。当主线程用于渲染绘图时,UI将不会更新 - 这包括更新进度条。

设置要使用后台模式渲染的绘图应该可以解决问题。如果您使用的是Androidplot 0.5.1或更高版本,则可以通过将其添加到绘图的xml来启用后台渲染线程:

renderMode="use_background_thread"

尼克

答案 1 :(得分:0)

看起来似乎没有一个完美的解决方案

我最终在Activity中有一个ProgressBar实例,每个片段中的另一个实例与Activity一个完全重叠,然后我只是将它们淡入淡出。

“卡住”效应现在可以忽略