最近将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内存管理是否有特殊之处, 殊不知..