在我的应用中,我正在生成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())));
感谢您的时间。
答案 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();