【问题标题】:Indeterminate ProgressBar stuck (not spinning) despite AsyncTask尽管有 AsyncTask,但不确定的 ProgressBar 卡住(不旋转)
【发布时间】:2013-05-02 23:28:40
【问题描述】:

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

【问题讨论】:

  • 您是否在 UI 线程以外的线程中启动异步任务?

标签: android android-asynctask androidplot


【解决方案1】:

这就是我的感觉:

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

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

renderMode="use_background_thread"

尼克

【讨论】:

  • 谢谢,我会试试的
【解决方案2】:

似乎没有完美的解决方案

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

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

【讨论】:

  • 谢谢,我会试试的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2023-03-21
  • 2014-08-12
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 2013-12-26
相关资源
最近更新 更多