• 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)的过程分析

  • 相关阅读:
    【HDOJ6666】Quailty and CCPC(模拟)
    【2019 Multi-University Training Contest 8】
    分布式锁的理解
    反射工具类【ReflectionUtils】
    Maven常用命令
    maven常用命令介绍
    mysql 优化策略(如何利用好索引)
    centos7搭建svn服务器及客户端设置
    Centos7 配置subversion
    Centos7更改网卡名称Eth0
  • 原文地址:https://www.cnblogs.com/mingfeng002/p/6761169.html
Copyright © 2020-2023  润新知