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