Android主线程如何向分线程发送消息

在平时开发过程中利用handler发送消息,一般都是分线程向主线程发送消息,然后改变UI,但分线程如何向主线程发送消息的呢,大致流程是这样的,首先创建一个分线程类,或者直接内部类也可以,然后让这个类继承Thread,重写他的run方法,在run方法里面去new Handler,把这个Hnadler变为全局,重写handleMessage(android.os.Message msg)方法。然后在主线程中用这个类或者对象开启线程后调他的属性Handler,发送消息,这样就是大致步骤。

但需要注意的是,有些情况下会报空指针,可能会报类为空,或者类的handler为空,主要是因为因为分线程与发送handler是不可控的,也许线程正在开启hanlder就已经发送消息了,这样就会造成空指针。

为了避免这种情况发送需要根据自己的业务逻辑进行调整,就是开启线程后发送handler必须有点时间间隔,这样就能避免出现空指针情况。

看代码,首先写一个分线程类:

public class Thread01 extends Thread {
public Handler mHandler;
public void initStart() {
    start();
}

@Override
public void run() {
    // TODO Auto-generated method stub
    super.run();
    Looper.prepare();
    mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case Conts.SUCCESS:
                Log.e("TAG", "数据: " + (String) msg.obj);

                break;
            }
        }
    };
    Looper.loop();

}
}

主线程里发送消息,在Thread01类里面的run方法里接收,为了避免空指针可以根据需求点击按钮发送消息或者是开启线程后sleep一秒,我这里为了简单直接在onStart()方法里去发送消息。

public class MainActivity extends Activity {
private Intent serviceIntent;
private Thread01 thread01;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    thread01 = new Thread01();

    thread01.initStart();

}

@Override
protected void onStart() {
    // TODO Auto-generated method stub
    if (thread01 != null && thread01.mHandler != null) {
        thread01.mHandler.obtainMessage(Conts.SUCCESS, "数据--------").sendToTarget();
    }
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值