技术总结_广播

技术总结:


静态广播与动态广播区别:
两者及其接收广播的区别:
1.动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优 先级有多低>\
2.动态注册广播不是 常驻型广播 ,也就是说广播跟随activity的生命周期。注意: 在activity结束前 ,移除广播接收器。
静态注册是常驻型 ,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
3.在同一个优先级下,谁先启动的快,谁将先接收到广播.
动态注册代码:
UpdateBroadcast  broadcast= new UpdateBroadcast();
IntentFilter filter = new IntentFilter("com.unit.UPDATE");
registerReceiver(broadcast, filter);
静态注册代码(在配置文件中添加):


<receiver android:name="net.youmi.android.AdReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <data android:scheme="package" />
            </intent-filter>
</receiver>
发送广播:


sendBroadcast 发送的是无序广播。
sendOrderedBroadcast 发送的是有序广播。
广播的生命周期:
广播接收器仅在它执行这个方法时处于活跃状态。当 onReceive() 返回后,它即为失活状态。


拥有一个活跃状态的广播接收器的进程被保护起来而不会被杀死,但仅拥有失活状态组件的进程则会在 其它进程 需要它所占有的内存的时候随时被杀掉。 所以,如果响应一个广播信息需要很长的一段时 间,我们一 般会将其 纳入一个衍生的线程中去完成,而不是在主线程内完成它,从而保证用户交互过程的流畅。


静态广播的实现:


添加权限:


<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 


1、在配置文件里面注册广播接收器:


receiver android:name=".comm.ConnectivityChangeBroadcastReceiver">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter></receiver>


2、在广播接收器里处理广播:

public class ConnectivityChangeBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
 Log.d("TAG",intent.getAction());
 if (isNetworkConnected(context)) {
  Log.d("TAG","网络连通了");
 }
}
public boolean isNetworkConnected(Context context) {
 if (context != null) {
  ConnectivityManager mConnectivityManager = (ConnectivityManager) context
    .getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo mNetworkInfo = mConnectivityManager
    .getActiveNetworkInfo();
  if (mNetworkInfo != null) {
   return true;
  }
 }
 return false;
  }
}
断开wifi,然后连接log日志如下(即使在Activity destroy状态下也能够运行):

02-03 15:40:23.842: D/TAG(16825): android.net.conn.CONNECTIVITY_CHANGE

02-03 15:40:30.732: D/TAG(16825): android.net.conn.CONNECTIVITY_CHANGE

02-03 15:40:30.732: D/TAG(16825): 网络连通了
 

动态广播的实现:


注册动态广播
发送动态广播
销毁动态广播

@Override

public void onClick(View v) {

 // TODO Auto-generated method stub

 switch (v.getId()) {

 case R.id.btDynamicBroadRegist:

  dyBroadCast = new DynamicBroadCast();

  IntentFilter filter = new IntentFilter();

  filter.addAction("com.test1");//过滤**条件的广播

  // 动态注册广播接收器

  registerReceiver(dyBroadCast, filter);

  break;

 case R.id.btDynamicBroadSend:

  Intent intent = new Intent();

  intent.setAction("com.test1");//设置过滤条件

  sendBroadcast(intent);

  break;

 case R.id.btDynamicBroadDestory:

  unregisterReceiver(dyBroadCast);

  break;

 }

}
 

DynamicBroadCast.java:

public class DynamicBroadCast extends BroadcastReceiver {
public DynamicBroadCast() {
 System.out.println("DynamicBroadCast---------------->");
}
@Override
public void onReceive(Context context, Intent intent) {
 // TODO Auto-generated method stub
 System.out.println("DynamicBroadCast---------------->onReceive");
}
}
输出:


注册动态广播:


02-03 20:15:00.923: I/System.out(9638): DynamicBroadCast---------------->


发送动态广播:


02-03 20:15:04.463: I/System.out(9638): DynamicBroadCast---------------->onReceive


销毁动态广播:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值