-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[安卓原生]线上版本出现大量的 java 的 NullPointer异常引起的闪退问题. #17910
Comments
@longchuan 我知道getSharedPreferences是干啥的. 这个问题和 getSharedPreferences 无关. 是 context丢失引起的. 我在另一个issue里详细谈了这个问题. |
从这些信息很难判断出是什么问题。context 丢失是怎么造成的呢? |
GlobalObject 中的 context 是一个 Activity 的context , 而不是 Application的context. 虽然 cocos的代码中, 会在Activity重建时,重新给 GlobalObject中的context赋值. |
@finscn 我们会加更多的保护,不过对于 activity 被销毁重建的逻辑只能是游戏重新开始,没法继续。引擎目前对于重启也还做得不是很好,代码中会用到一些静态和全局变量,这些可能会导致问题。 |
现在的情况是 我们游戏上线后 , 大概 2%的用户会有 闪退(有的是真闪退, 直接退到桌面, 有的其实是自动重启游戏)的情况. 这个闪退率挺高的. 另外 那个 |
华为的问题我们可以问一下。 |
@minggo 还有个华为的问题, 大量华为设备出现崩溃错误. 此错误, 还有前面提到的 |
这个 libart.so 相关的错误 也是 崩溃的重灾区.
|
或者一种最快见效的方法:直接将 GlobalObject 的 sContext 从 Activity 转换为 Application 的上下文 这样子即便是 Activity 退居后台,由于系统内存不足而被销毁,但依旧不影响 OKHttp 创建的下载任务继续在执行,并且此时依旧能通过 Application 的上下文打开 SharedPreferences |
我咨询了一些安卓开发的朋友, 他们也给出了类似的建议. 但是这个地方涉及到深度修改 cocos代码, 我没这个能力. 也不敢轻易改. @minggo , 我们自己用自定义原生引擎, 做了 #17911 这个修改, CocosDownloader相关的 null pointer 错误几乎消失了. |
我看 而 GlobalObject 本来提供了 我感觉这看起来更多是写错之类,一般来说这里的 getContext 应该就是要返回 Application 的上下文 不过最终还是看引擎组同学怎么看吧 我是觉得这里就是写错了,init 的时候, sContext 应该就是要取 Application 的 Context,这样子,GlobalObject.getContext 才好返回 Application 的 Context |
谢谢 @longchuan 同学在各个issue里的热心回答,为我们引擎组分担了不少压力。 但还请保持冷静,不要过于激动,哈哈哈! |
Cocos Creator version
3.8.4
System information
android
Issue description
错误信息如下:
还有另外一种
可能是某些安卓设备的特殊性导致的? cocos是否考虑在某些地方做一些 null check ?
还有一种不是 null pointer 异常, 但是也是 java 的
Relevant error log output
No response
Steps to reproduce
.1
Minimal reproduction project
No response
The text was updated successfully, but these errors were encountered: