java.lang.RuntimeException: Can not toast on a thread that has not called Looper.prepare()终极解决方案

该博客探讨了Android中UI线程与后台线程交互时遇到的问题,特别是在显示Toast消息时出现的界面卡顿。博主通过尝试不同的解决方案,如使用Looper和直接调用runOnUiThread,最终找到了避免界面卡死的正确方法,即使用runOnUiThread更新UI。这为Android开发者处理线程同步提供了参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源代码:

Thread thread = new Thread(() -> {
    MySQLUtil mySQLUtil = new MySQLUtil(this);
    mySQLUtil.getConnection("cce-18");
    ArrayList<String> res = null;
    res = mySQLUtil.getMajorGpaRank(idMyself, major, finalYear, finalSemester_, course_nature);
    if(res == null) {
         ToastUtil.showMessage(getApplicationContext(), "暂无成绩信息!");
    }else {...}
});
thread.start();
try {
    thread.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}

网上看了很多解决办法,都是在Toast的前后加上:

Looper.prepare();
ToastUtil.showMessage(getApplicationContext(), "暂无成绩信息!");
Looper.loop();

实验之后发现会卡在原来的界面,正确的解决办法:开一个runOnUiThread,如下所示:

runOnUiThread(() -> {
    ToastUtil.showMessage(getApplicationContext(), "暂无成绩信息!");
});
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyril_KI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值