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(); } } }