handler中Looper的用法

来源:互联网 发布:淘宝如何避免售假违规 编辑:程序博客网 时间:2024/06/06 00:28

最近做的项目中有一块东西,百思不得其解,然后还是解决了,小笔记。
问题:在非Activity的普通类中创建handler,再把handler传给其他的类,这时候我新new的其他类总是不走那一行,也就是我的新类总是空指针。
我的代码:

    new Thread(){          public void run(){            Looper.prepare();            handler = new Handler(){                 @Override                  public void handleMessage(Message msg) {                      switch (msgType) {                    case SocketStatus:                        processType = ProcessType.valueOf(msg.arg1);                        if (msg.obj != null && msg.obj instanceof StatusCode) {                            status = (StatusCode) msg.obj;                        }                        break;                        default:                            break;                        }                        break;            };             Looper.loop();//11            Bclass= new Bclass(mContext, handler);//22          }        }.start();

现在的问题就是22那一行代码没有走,Bclass一直都是空指针报错。
我们都知道在子线程中创建Handler那必须得用Looper.prepare和Looper.loop,我是用到了,但是问题是,loop表明他是循环,也就是说他一直在循环Looper.prepare和Looper.loop之间的代码,并没有走到22那一行代码,所以解决方法是:把22放在11的上面。