最近將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內存管理是否有特殊之處, 殊不知..