问题出现场景 Eclipse 下,Cocos 调用UI处理(java) 出错。
error:
VM aborting
Fatal signal 6 (SIGABRT) at 0x000064a6 (code=-6), thread 25880 (Thread-11230)
分析:
由错误码可知,这是一个由线程引起的致命异常导致奔溃的。在java 中,凡是 调用到UI界面的 更改操作 ,都需要在主线程中作处理。
更新UI只能是主线程的工作,子线程更新UI是线程不安全的,所以android里非主线程操作主UI就会报错。
我是在接SDK 时,在子线程中作了UI的 更改,而引起的线程错误。也大概了解出错的地方,知道出错的地方也大概知道是什么原因引起的,也比较好解决。但这类问题,引起的原因种类繁多,这里仅作为参考使用。╰( ̄▽ ̄)╭
解决:
在你需要 作UI更改操作的 地方写下
Message msg = new Message();
msg.what = 1;
msg.obj = "更改UI文本";
myActivity.handler.sendMessage(msg);
然后在 handler 中通知 主线程 作处理:把消息放入主线程队列中,配合主线程更新UI.
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if(msg.what == 1){
// 你需要做 UI更改操作方法的实现, 如:
String str = (String)msg.obj;
textView.setText(str); // 更改UI 的文本标签
}
super.handleMessage(msg);
}
};