2013-02-13 87 views
0

在我的应用程序中,我生成PDF。它可能需要长达45秒,所以我决定制作一个进度条。进度条需要从与UI线程分离的线程更新,因此我在该线程中放置了“convertNotesToPDF”函数。进度条在convertNotesToPDF函数中更新。不幸的是这造成了一些问题大约50%的时间我在进度条线程中生成pdf,生成一个不可打开的大小为0的PDF。另外50%的时间工作正常,但显然不会削减它。当我把转换notestopdf线程外,一切工作正常。在线程中创建PDF

以下是一些参考代码。首先这是工作时间的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

使用的AsyncTask。它特别为这种东西设计 – 2013-02-13 17:03:31

+0

谢谢拉格哈夫! AsyncTask完美运行! – clavio 2013-02-13 19:23:37

回答

0

我不知道你说的是什么时候引用ProgressBarThread。 而是试图运行一个线程中的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();