2013-02-13 84 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();