热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

搜了好多setText引起闪退崩溃的解决方法,主要是这两种:setText需接字符串,否则将会按照id查找相应字符,若输入的是数字,则默认认为是id,当查找不到相应字符的id时就会

搜了好多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));
}
});

推荐阅读
author-avatar
成就未来7368
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有