0

在我的应用程序中,我正在生成 PDF。它可能需要长达 45 秒,所以我决定制作一个进度条。进度条需要从独立于 UI 线程的线程进行更新,因此我将“convertNotesToPDF”函数放在该线程中。进度条在 convertNotesToPDF 函数中更新。不幸的是,这引起了一些问题。大约 50% 的时间我在进度条线程中生成 pdf,会生成无法打开的 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())));

这是我在进度条线程之外转换notetopdf时的代码:

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 时,我不知道您在说什么。而是尝试在 Thread 内运行 PDF 处理,并在其 run 方法内更新进度条,如下所示:

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 回答