华为NEXUS 6P,Android N,原生系统。集成后如果将应用切换到后台(不论如何切换),经常报应用程序关闭的错误。AVOSCloud.initialize已经调用过了,而且会每隔1分钟调用一次(没这个逻辑前也会发生此错误,每隔一分钟调用就是为了保证AVOSCloud.initialize调用,但是没有用。),其他操作系统(已测试Android 4.4,Android 6)无此现象,请处理一下。

以下是捕获的错误信息:

09-18 22:51:04.364 12814-12814/com.dengta520.dengtaapp E/com.avos.avospush.push.AVPushServiceAppManager: Please call AVOSCloud.initialize first
09-18 22:51:04.374 12814-12814/com.dengta520.dengtaapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dengta520.dengtaapp, PID: 12814
java.lang.ExceptionInInitializerError
at java.lang.Class.newInstance(Native Method)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3141)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1530)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:6066)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:770)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:660)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
at com.avos.avoscloud.PushService.(PushService.java:89)
at java.lang.Class.newInstance(Native Method)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3141)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1530)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:6066)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:770)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:660)

这里暂不确定是否与 Android N 有关,看日志应该是 AVOSCloud.initialize 传入的 Context 为 null,请问是在代码什么地方调用的 AVOSCloud.initialize?传入的 context 是 application context 还是 activity context?

是写了一个Service,将AVOSCloud放在其中处理的,context是service的context。但除了Android N以外的其它手机不会有崩溃问题。另外,在切换网络(Wifi>3G/4G等)时也会发生同样的问题。

AVOSCloud.initialize 需要在自定义的 Application 的 onCreate 中调用,在自己写的 Service 中有可能会因为时序的问题导致此问题,你可以先修改一下,然后看看是不是还有问题。

好的,我改成在Application中调用,看看是否还有问题。感谢指导。