原因:
view控件不是线程安全的,所以更新UI操作都必须在UI线程中完成,而不能在非UI线程中。
解决方法:
使用Handler,其实每个线程都有自已的handler,来处理自己的消息队列,当多线程间需要通信时,可以使用handler。
1、在可以操作UI的代码处创建Handler对象。
final Handler uiHandler = new Handler();
2、把更新UI的逻辑放到Runnable对象中
final Runnable mUpdateResults = new Runnable() {
public void run() {
updateUI();
}
};
3、在子线程的方法中调用handler的post的方法,入参是runnable对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
NetworkOperation();//一个很费时间的I/O操作,比如网络或文件读写等等。
}
protected void NetworkOperation() {
Thread t = new Thread() {
public void run() {
doSomething(); //处理得到结果了,这里一些内容保存在主类的成员变量中
cwjHandler.post(mUpdateResults); //高速UI线程可以更新结果了
}
};
t.start();
}
继续阅读与本文标签相同的文章
上一篇 :
5G即将爆发!独角兽论坛热议5G创新应用
下一篇 :
这几款手机app,用过的都说惊艳!
-
功能超多还不占内存,果然浓缩的都是精华!
2026-05-18栏目: 教程
-
PC端如何不再窗口切换、实现沉浸式资料收集?
2026-05-18栏目: 教程
-
不蒸馒头争口气,哈弗H6、博越这些国产SUV让合资品牌不得不忌惮
2026-05-18栏目: 教程
-
中国移动向携号转网妥协,必须满足这一条件,网友:套路太深!
2026-05-18栏目: 教程
-
老板让我对比word文档差异,我用了2小时,同事1分钟就搞定了
2026-05-18栏目: 教程
