广播接收器注册一共有两种形式 : 静态注册和动态注册.

两者及其接收广播的区别:

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>




动态网站与静态什不同,说详细点,不止只是可以流言,注册,与动态有后台添加把?



简单讲,就是能和你互动的网页,称为动态网页.要浏览的网页是根据你的输入而形成的,如注册,注册后的页面每一个用户都是不同的.动态网页一般都和数据库连接,根据你的输入,提取数据库德某些部分.动态网页一般的后缀名为.asp;.php;.jsp等
 


Android 为何动态广播接收器比静态广播接收器要接受的早



同一优先级的广播接收器,动态的要比静态注册的早。
动态注册:即由代码注册的广播接收器静态注册:即在 AndroidManifest.xml 中注册的广播接收器 优先级: 当广播为有序发送的时候,要按这个排序并顺序发送。 sendBroadcast 发送的是无序广播。sendOrderedBroadcast 发送的是有序广播。 好了,现在寻找问题原因,在找原因前肯定有这样的想法,一个有序队列,既然允许有相同的优先级存在,那么在同优先级内要不然有排序子因素,要不基就是按照某种操作可能影响顺序。后者可能性很大。 打开源码,顺着 动态注册广播接受器 找,最后是 ActivityManagerService.java 这个文件找到了 registerReceiver 的实现。同地也看到,存储的广播接收器列表是 HashMap mRegisteredReceivers 这个变理。 里面有一段代码为: ReceiverList rl = (ReceiverList)mRegisteredReceivers.get(receiver.asBinder()); if (rl == null) { rl = new ReceiverList(this, callerApp, Binder.getCallingPid(), Binder.getCallingUid(), receiver); if (rl.app != null) { rl.app.receivers.add(rl); } else { try { receiver.asBinder().linkToDeath(rl, 0); } catch (RemoteException e) { return sticky; } rl.linkedToDeath = true; } mRegisteredReceivers.put(receiver.asBinder(), rl); } 在里面查找有没有这个 Receiver , 如果没有 put 进去。 看到这里貌似没有对广播的顺序做处理。是不是有别的地方做排序呢,找找成员变理,发现一个可疑的变量:final ArrayList mOrderedBroadcasts没错,感觉就应该是它了。 找找对它的操作,只有一处 mOrderedBroadcasts.set ,把代码摘录一下: BroadcastRecord r = new BroadcastRecord(intent, callerApp,
callerPackage, callingPid, callingUid, requiredPermission,
sticky, false); mOrderedBroadcasts.set(i, r);在这里放入了一个 BroadcastRecord 对像,而这个对像中主要的东西其实是 receivers向上跟踪 int NT = receivers != null ? receivers.size() : 0; int it = 0; ResolveInfo curt = null; BroadcastFilter curr = null; while (it < NT && ir < NR) { if (curt == null) { curt = (ResolveInfo)receivers.get(it); } if (curr == null) { curr = registeredReceivers.get(ir); } if (curr......余下全文>>