广播:一、本地广播

广播类型:

  • 全局:其它APP可以收到(可以说是;public)
  • 本地:只有自己APP收到(可以说是:private)

广播机制:

  • 无序:接收端不可修改,不可拦截
  • 有序:接收端:可修改,可拦截

一、本地广播:

广播定义:

在这里你可以留意一下:

  当我使用单例实现的时候,传递拖来的创建方,我并不直接用。

  因为:它是谁?生命周期怎么样?是个问题。

  所以我采用 getApplicationContext 。来进行和App周期进行绑定。(详情可多去了解一下关于Context。)

public class Broadcaster {
private static Broadcaster sInstance;
private Context mContext;

private LocalBroadcastManager localBroadcastManager;

public static Broadcaster getInstance(Context context, BroadcastReceiver receiver) {
if (sInstance == null) {
sInstance = new Broadcaster(context.getApplicationContext(),receiver);
}
return sInstance;
}

private Broadcaster(Context context, BroadcastReceiver receiver) {
mContext = context;
setReceiver(receiver);
}

public void setReceiver(BroadcastReceiver receiver) {

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.bug01.Broadcast.AAA");
intentFilter.addAction("com.bug01.Broadcast.BBB");

//注册本地接收器
localBroadcastManager = LocalBroadcastManager.getInstance(mContext);
localBroadcastManager.registerReceiver(receiver, intentFilter);
}

public void DoSomething() {
// 定义一个线程,模拟从其它地方发生了一个广告。
new Thread(new Runnable() {
@Override
public void run() {
Intent intent = new Intent("com.bug01.Broadcast.AAA");
//发送本地广播
localBroadcastManager.sendBroadcast(intent);//发送无序广播
//localBroadcastManager.sendBroadcastSync(intent);//发送有序广播
}
}).start();
}

/**
* 注销时要同时注销接收器
*/
protected void onDestroy(BroadcastReceiver receiver) {
localBroadcastManager.unregisterReceiver(receiver);
}
}

接收器定义:

public class LocalReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "收到本地广播" + intent.getAction(), Toast.LENGTH_SHORT).show();
//abortBroadcast(); 取消广播向下传递
}
}

使用:



public class MainActivity extends AppCompatActivity {

Broadcaster mBroadcaster;
LocalReceiver mLocalReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mLocalReceiver = new LocalReceiver();

mBroadcaster = Broadcaster.getInstance(this, mLocalReceiver);
mBroadcaster.DoSomething();
}


@Override
protected void onDestroy() {
mBroadcaster.onDestroy(mLocalReceiver);
super.onDestroy();
}
}

 

posted @ 2019-07-25 19:55  蜜铀  阅读(180)  评论(0编辑  收藏  举报