Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 不确定进度条卡住(未旋转),尽管执行了异步任务_Android_Android Asynctask_Androidplot - Fatal编程技术网

Android 不确定进度条卡住(未旋转),尽管执行了异步任务

Android 不确定进度条卡住(未旋转),尽管执行了异步任务,android,android-asynctask,androidplot,Android,Android Asynctask,Androidplot,我构建了一个应用程序,在该应用程序中,我使用library以选项卡式布局(使用ActionBar选项卡)显示多个图表 在每个选项卡上,我在片段中显示一个图表。由于切换选项卡时渲染速度非常慢(我有一系列3000/4000值),因此我尝试使用AsyncTask将图形生成放在后台线程中 它工作正常,但我注意到,如果我使用不确定的ProgressBar,指示器不会旋转,但仍然保持不变,这意味着有一些进程阻塞了UI线程。(我猜在这里) 你对如何改进我的申请有什么建议吗?我想将ProgressBar显示为加

我构建了一个应用程序,在该应用程序中,我使用library以选项卡式布局(使用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
私有类AsyncPlotTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
//仅显示加载消息
加载.setVisibility(视图.VISIBLE);
dataContainer.setVisibility(View.GONE);
}
@凌驾
受保护的布尔doInBackground(XYPlot…plot){
布尔成功=真;
绘图[0]。添加系列(数据系列,数据体验格式);
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
//隐藏加载消息并显示图形
loading.setVisibility(View.GONE);
dataContainer.setVisibility(View.VISIBLE);
}
}//异步绘图任务

似乎没有完美的解决方案

我在活动中得到了一个ProgressBar实例,每个片段中的另一个实例与活动一完全重叠,然后我将它们淡入淡出


“卡滞”效应现在可以忽略不计了,似乎没有一个完美的解决方案

我在活动中得到了一个ProgressBar实例,每个片段中的另一个实例与活动一完全重叠,然后我将它们淡入淡出


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

以下是我听到的:

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

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

renderMode="use_background_thread"

尼克

这是我听到的声音:

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

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

renderMode="use_background_thread"

Nick

你是在UI线程以外的线程中启动异步任务吗?你是在UI线程以外的线程中启动异步任务吗?谢谢,我会试试看,我会试试看,我会试试看