Can't create handler inside thread that has not called Looper.prepare()

网络上关于该问题的描述,很多都很复杂,我总结一下:

 

问题原因:非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);
   }
  });

 

简单明了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值