聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长

导致闪退的根源cocos2dx的平台实现大坑

2013-06-14 20:51 浏览: 1897126 次 我要评论(0 条) 字号:

最近将cocos2dx的程序移植到Android上, 某阶段突然发现开始闪退. 日志方式跟了很久, 发现有内存被修改. 因为不能像VC那样有内存断点, 只有靠日志继续跟踪, 绕了很久, 终于发现一个问题

CCApplication::sharedApplication()->run(); 在Windows下除了初始化回调外, 还有Windows平台特殊的消息循环. 既然是循环, 这个run函数会一直阻塞到程序退出, 因此我自然的在run后添加自己的资源卸载

换到Android上呢CCApplication::sharedApplication()->run();的实现变了. 由于Android上没有Windows的消息循环, 所有事件都是通过java方式的事件通知. 因此CCApplication::sharedApplication()->run();变成了非阻塞, 可是我在run后添加了资源卸载. 结果导致系统刚初始化就卸载了资源, 内存直接不可用, 导致后面cocos2dx的API部分使用无问题, 而自己引擎的API调用闪退.

cocos2dx的这个run函数命名有严重问题.. 被坑了好久, 还一直怀疑NDK内存管理是否有特殊之处, 殊不知..



战魂小筑 2013-06-14 17:15 发表评论


网友评论已有0条评论, 我也要评论

发表评论

*

* (保密)

Ctrl+Enter 快捷回复