1

androidplotライブラリを使用して、(ActionBar タブを使用して) タブ付きレイアウトで複数のチャートを表示するアプリケーションを構築しました

各タブで、フラグメント内に 1 つのグラフを表示します。タブを切り替えるとレンダリングがかなり遅いため (一連の 3000/4000 値があります)、AsyncTask を使用してグラフ生成をバックグラウンド スレッドに入れようとしました。

正常に動作しますが、不確定な ProgressBar を使用すると、インジケーターが回転せず、静止したままであることに気付きました。これは、UI スレッドをブロックしているプロセスがあることを意味します。(ここで私の推測)。

アプリケーションを改善する方法について何か提案はありますか? ProgressBar をテキストではなく読み込みインジケーターとして表示したい

これが AsyncTask コードです。回避策として、ProgressBar の代わりに「Calculating...」メッセージを使用することになりました。

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 に答える