Android ProgressBar进度完成后调用Toast导致应用崩溃如何解决
崩溃原因
- 安卓所有UI相关操作必须运行在主线程(UI线程),你当前调用
Toast.makeText以及progressBar.dismiss()的代码写在自定义的子线程中,子线程默认没有初始化Looper,无法处理UI相关的消息,因此触发崩溃,崩溃日志也明确提示了该问题。
修复方案
利用你已经初始化好的、绑定主线程的ProgressBarHandler,将完成后的UI操作抛到主线程执行即可,修改对应代码块如下:
if (ProgressBarStatus >= 100) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } // 将UI操作post到主线程执行 ProgressBarHandler.post(new Runnable() { @Override public void run() { progressBar.dismiss(); Toast.makeText(MainActivity.this, "File Downloaded!", Toast.LENGTH_SHORT).show(); } }); }
额外优化建议:如果触发下载过程中页面被销毁(比如用户按返回键关闭了页面),要及时停止工作线程、清空Handler的待处理消息,避免内存泄漏或者空指针异常。
内容的提问来源于stack exchange,提问作者A A
相关产品推荐
相关产品推荐

