BroadCast 是android提供的跨进程通讯的有一利器。

1.异步执行onReceiver

    @Nullable
    public abstract Intent registerReceiver(BroadcastReceiver receiver,
            IntentFilter filter, @Nullable String broadcastPermission,
            @Nullable Handler scheduler);

这是context里面注册广播的API,duplex2个我们不常用的东东。

我们分别来讨论这2个东西。

先讨论异步handler。

如果我们传入一个handler,会怎样?我们所有的onReceiver是运行在主线程吗?

package com.joyfulmath.samples.broadcastsample;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;

import com.joyfulmath.servicesample.R;
import com.joyfulmath.servicesample.TraceLog;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;

/**
 * Created by Administrator on 2016/10/23 0023.
 */
@EActivity(R.layout.activity_main)
public class BcSampleActivity extends Activity {

    HandlerThread mThread = null;
    Handler nHandler = null;
    BroadCastAAA aReceiver = new BroadCastAAA();

    @Override
    protected void onResume() {
        super.onResume();
        TraceLog.i();


    }

    @Override
    protected void onPause() {
        super.onPause();
        TraceLog.i();
        unregisterReceiver(aReceiver);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        aReceiver = null;
    }

    @AfterViews
    void initViews() {
        TraceLog.i();
        mThread = new HandlerThread("samples") {
            @Override
            protected void onLooperPrepared() {
                nHandler = new Handler(getLooper()) {
                    @Override
                    public void dispatchMessage(Message msg) {
                        TraceLog.i(msg.toString());
                        super.dispatchMessage(msg);
                    }

                    @Override
                    public void handleMessage(Message msg) {
                        TraceLog.i();
                        dispatchMsg(msg);
                    }
                };
                IntentFilter filter = new IntentFilter("com.joyfulmath.sample.broadcast.action");
                registerReceiver(aReceiver, filter, null, nHandler);
            }
        };
        mThread.start();
    }

    @Click(R.id.btn_connect)
    void onBtnClick() {
        TraceLog.i();
//        nHandler.sendEmptyMessage(0x01);
        sendBroadcast(new Intent("com.joyfulmath.sample.broadcast.action"));
    }

    void dispatchMsg(Message msg) {
        switch (msg.what) {
            case 0x1:
                TraceLog.i();
                break;
        }
        TraceLog.i();
    }

    public class BroadCastAAA extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            TraceLog.i();
        }
    }
}
broadcastsample

相关文章: