网络上关于该问题的描述,很多都很复杂,我总结一下:
问题原因:非UI线程想修改UI界面,产生线程冲突,从而报错.(Android有条小规则:只允许UI线程修改Activity里面的UI组件)
问题分析:
1.首先了解以下2个简单概念:
UI线程:就是主线程,其他的均为非UI线程
Handler类:Android多线程之间通信用的类
2.如何解决该问题
显而易见,非UI线程通过Handler发送消息给UI线程(主线程),UI线程收到消息后修改UI组件。
3.详细代码实现,分两部分:
a.主线程中收到消息的处理部分,即修改UI组件的处理:(以显示AlertDialog为例)
以下部分是在主线程代码中增加private成员,Handler收到消息后显示一个dialog
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case ID_USER:
Dialog alertDialog = new AlertDialog.Builder(SimplePlayerActivity.this)
.setTitle("对话框的标题").setMessage("对话框的内容").create();
alertDialog.show();
}
}
};
b.在主程序中,需要弹出alterdialog的地方(这里的Alterdialog不属于MainActivity),开启一个runable,向Handler发送消息。
mHandler.post(new Runnable() {
@Override
public void run() {
Message msg = new Message();
msg.what = ID_USER;
mHandler.sendMessage(msg);
}
});
简单明了。。。