0

私のアプリでは、PDF を生成しています。最大で 45 秒かかる可能性があるため、プログレス バーを作成することにしました。プログレス バーは、UI スレッドとは別のスレッドから更新する必要があるため、そのスレッドに「convertNotesToPDF」関数を配置しました。プログレス バーは convertNotesToPDF 関数で更新されます。残念ながら、これはいくつかの問題を引き起こしました。プログレスバー スレッド内で PDF を生成する時間の約 50% で、開くことができないサイズ 0 の PDF が生成されます。残りの 50% の時間は問題なく動作しますが、それでは明らかに効果がありません。convert notestopdf をスレッドの外に置くと、すべて正常に動作します。

参照用のコードを次に示します。まず、これは 50% の確率で動作するコードです (関係のないコードをいくつか取り出しました)。

new Thread(new Runnable() {
        public void run() {

            convertDataToPDF(bmap); 
            convertNotesToPDF();            
            progressBar.dismiss();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
        }
    }).start();

            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

プログレスバースレッドの外でnotestopdfを変換するときのコードは次のとおりです。

new Thread(new Runnable() {
        public void run() {

            convertDataToPDF(bmap); 

            progressBar.dismiss();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
        }
    }).start();
            convertNotesToPDF();    
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

お時間をいただきありがとうございます。

4

1 に答える 1

0

ProgressBarThread を参照するときに何を話しているのかわかりません。むしろ、スレッド内で PDF 処理を実行し、その実行メソッド内でプログレスバーを次のように更新してみてください。

runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        //update your progressbar

                    }
                });

したがって、全体の構造は次のとおりです。

Thread pdfThread=new Thread(
new Runnable()
{
   public void run()
   {
      convertDataToPDF(bmap); 
      convertNotesToPDF();
      runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            //update your progressbar

                        }
                    });         
   }
}
);
pdfThread.start();
于 2013-02-13T17:10:15.990 に答える