搜了好多setText引发闪退/崩溃的解决方法,主要是这两种:ide
可是我拿到的这个程序不符合上面的两种错误,后来把崩溃点日志拿给大神看了一下,大神说Only the original thread that created a view hierarchy can touch its views是由于在安卓中只有两种线程,UI线程(主线程)和Worker线程,在非UI线程中不能进行UI操做。布局
看了看三个崩溃点,都在callback里面,可不就是都在非UI线程里面么……post
修改的方法:使用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) 修复后代码code
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)); } });