1

我构建了一个应用程序,在其中使用androidplot库以选项卡式布局(使用 ActionBar 选项卡)显示多个图表

在每个选项卡上,我在片段中显示一个图表。由于切换选项卡时渲染速度很慢(我有一系列 3000/4000 值),因此我尝试使用 AsyncTask 将图形生成放在后台线程中。

它工作正常,但我注意到如果我使用不确定的 ProgressBar,指示器不会旋转但它仍然保持静止,这意味着有一些进程阻塞了 UI 线程。(我的猜测在这里)。

您对如何改进我的应用程序有什么建议吗?我想将 ProgressBar 显示为加载指示器而不是静态文本

这是 AsyncTask 代码,我最终使用“正在计算...”消息而不是 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
4

2 回答 2

1

这对我来说是这样的:

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

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

renderMode="use_background_thread"

缺口

于 2013-05-02T15:28:40.327 回答
0

似乎没有完美的解决方案

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

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

于 2013-04-27T15:01:33.797 回答