技术总结_广播

来源:互联网 发布:上传下载文件java代码 编辑:程序博客网 时间:2024/05/30 07:12
技术总结:


静态广播与动态广播区别:
两者及其接收广播的区别:
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


销毁动态广播:


0 0
原创粉丝点击