setText/setSeleted/invalidate控件闪退(崩溃)

搜了好多setText引起闪退/崩溃的解决方法,主要是这两种:

  • setText需接字符串,否则将会按照id查找相应字符,若输入的是数字,则默认认为是id,当查找不到相应字符的id时就会崩溃。
  • 被setText修改的控件布局与当前布局不同,没有加载控件的布局。

但是我拿到的这个程序不符合上面的两种错误,后来把崩溃点日志拿给大神看了一下,大神说Only the original thread that created a view hierarchy can touch its views是因为在安卓中只有两种线程,UI线程(主线程)和Worker线程,在非UI线程中不能进行UI操作

看了看三个崩溃点,都在callback里面,可不就是都在非UI线程里面么……

修改的方法:使用post向UI线程请求UI操作

a) 原代码

String totalStr = Utility.byte2XB((total << 20));
String freeStr = Utility.byte2XB((free << 20));
tvRouterStorage.setText(getString(R.string.router_download_store, totalStr, freeStr));

b) 修复后代码

totalStr和freeStr定义为类对象
totalStr = Utility.byte2XB((total << 20));
freeStr = Utility.byte2XB((free << 20));
tvRouterStorage.post(new Runnable() {
    @Override
    public void run() {
        tvRouterStorage.setText(getString(R.string.router_download_store, totalStr, freeStr));
    }
});
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值