最近將cocos2dx的程序移植到Android上, 某階段突然發(fā)現開始閃退. 日志方式跟了很久, 發(fā)現有內存被修改. 因為不能像VC那樣有內存斷點, 只有靠日志繼續(xù)跟蹤, 繞了很久, 終于發(fā)現一個問題
CCApplication::sharedApplication()->run(); 在Windows下除了初始化回調外, 還有Windows平臺特殊的消息循環(huán). 既然是循環(huán), 這個run函數會一直阻塞到程序退出, 因此我自然的在run后添加自己的資源卸載
換到Android上呢CCApplication::sharedApplication()->run();的實現變了. 由于Android上沒有Windows的消息循環(huán), 所有事件都是通過java方式的事件通知. 因此CCApplication::sharedApplication()->run();變成了非阻塞, 可是我在run后添加了資源卸載. 結果導致系統(tǒng)剛初始化就卸載了資源, 內存直接不可用, 導致后面cocos2dx的API部分使用無問題, 而自己引擎的API調用閃退.
cocos2dx的這個run函數命名有嚴重問題.. 被坑了好久, 還一直懷疑NDK內存管理是否有特殊之處, 殊不知..