最近学习Android开发,希望点击按钮后,在后台开一个线程,读取sd卡上的一个文件。
由于文件比较大,因此想用ProgressDialog来提示"加载中...",但是不论如何编写,都会出现一个怪问题:
程序运行,等待一段时间之后,ProgressDialog对话框一闪就消失了。
通过调试发现,是在文件读完之后才显示的ProgressDialog,不论怎么修改都不行。
百思不得其解,上网查了好久,终于找到一个外国的帖子,回帖中给出了答案,原文如下:
Your join() line blocks the UI thread that runs the ProgressDialog. You are therefore blocking layouts, drawings, etc.
原来是因为我使用了Thread的join()方法造成的,查了一下帮助,join()的作用如下:
Blocks the current Thread (Thread.currentThread()
) until the receiver finishes its execution and dies.
由于我调用了join方法,导致UI线程阻塞了,而ProgressDialog是UI线程运行的,因此造成ProgressDialog弹不出来,而文件还是可以读取。
原先我是想通过join确保文件读取线程结束后,再进行之后的处理,没有ProgressDialog对话框的话就不会有问题,但是有ProgressDialog,就得换一种方式,通过Handle的方式传递消息来实现,具体网上很多我就不贴了。
立此贴以做备份~~~