出现场景:
Launcher 重启的时候,电话进来。
代码分析:
通过查看代码有在调用前进行服务的判空处理,为什么还会有 NullPointerException 异常呢?并且是调用远程接口出现的,且远程接口异常一般是 RemoteException,这里确实 NullPointerException。
值得注意的是 readException,可以看到是读取过来的异常,说明异常是发生在服务端,这里只是读取到异常了。因为服务端在 launcher 中实现,launcher刚好在重启,那么launcher的对象应该是重新创建了,且其使用了单例模式,拿到了原有对象(已经为空)。
异常
E AndroidRuntime: FATAL EXCEPTION: main
E AndroidRuntime: Process: com.android.dialer, PID: 2549
E AndroidRuntime: java.lang.NullPointerException: Attempt to read from field 'android.os.MessageQueue android.os.Looper.mQueue' on a null object reference
E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:1690)
E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:1637)
客户端解决
客户端只能是捕获异常,因为异常发生在服务端