Unable to instantiate receiver xxx.receiver.NetworkReceiver异常

Unable to instantiate xxxreceiver.NetworkReceiver: 这个异常是之前版本有NetworkReceiver(监听网络变化的),新的版本删除了NetworkReceiver类。

在发送一条广播的时候,由于注册一个广播类型的接收器可能有多个,会把所有符合条件的的BroadcastFilter实例放在一个List<BroadcastFilter>中。发送过程中不会去更新这个分发的列list。下次发送广播会获得一个最新接受的列表,按这个列表发送。

这个问题能复现

问题复现步骤

     1.一个程序Test发送一个广播有多个(a,b,c,d,e,f,g)Receiver在manifest注册了这个广播,为了能模拟先后顺序将(a,b,c,d,e,f,g)android:priority值分别从大到小,并且每个程序接到广播后睡眠4秒

     2.有一个程序testG的g注册了广播在最后执行,(为了模拟覆盖安装过程)

              a.覆盖安装分别在manifest里面删除了g的注册,但是不删除g注册远文件g.java (不崩溃)

              b.覆盖安装分别在manifest里面删除了g的注册,但是删除g注册远文件g.java   (崩溃)

              c.覆盖安装分别在manifest里面不删除了g的注册,但是删除g注册远文件g.java (崩溃)

             d.覆盖安装分别在manifest里面新加一个注册h,g能收到广播,h不能收到广播

             e.覆盖安装分别在程序的Application里面动态注册一个广播i,i不能接受到广播

   问题出在,在覆盖安装的时候,对于已经发送出的广播,不会更新这个List<BroadcastFilter>列表。如果这个是在新程序里面,删除了老的receiver,就会出问题了

   

相关资料:Android应用程序发送广播(sendBroadcast)的过程分析

              Android应用程序注册广播接收器(registerReceiver)的过程分析

原文地址:https://www.cnblogs.com/mingfeng002/p/6761169.html