在线程中创建PDF

时间:2013-02-13 17:02:20

标签: java android multithreading

在我的应用中,我正在生成PDF。它最多可能需要45秒,所以我决定制作一个进度条。需要从与UI线程分开的线程更新进度条,因此我将“convertNotesToPDF”函数放在该线程中。进度条在convertNotesToPDF函数中更新。不幸的是,这引起了一些问大约50%的时间我在进度条线程中生成pdf,生成一个不可打开的大小为0的PDF。其他50%的时间它工作正常,但显然不会削减它。当我将转换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())));

以下是我在进度条线程之外的convertnotestopdf时的代码:

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())));

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

当您引用ProgressBarThread时,我不知道您在谈论什么。 而是尝试在Thread内部运行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();