按理说,6681用的是s60 FP2的,比3230的s60 FP1的系统要高一档,至少应该不会比3230要差吧。结果倒好,反过来了,nokia啊。。。。。。
今一直在debug,偶然间想起了appman,忽然想查下内存使用情况。一查,好了,本来空闲1M的内存现在只剩30K+,瀑布汗(声明啊,我没乱分配空间,所有不用的类跟数组,都null了,否则在3230上就该有这问题了)
说内存泄漏吧,我们调用下system.gc,让KVM来清理一下,应该没问题了吧。结果,在emulator上,KVM能做的很好,200K的虚拟内存,程序始终保持在40K+的位置。移植到6681,问题依旧,结论是:6681并没有调用GC,无论在内存多小的情况下。
GOOGLE/baidu也搜了很多文章,比较合理的解释是:6681的内存较小,且KVM功能有欠缺,内存管理能力不足。
不说废话了,就算KVM有问题,俺们PG也得硬着头皮把东西做起来。
对于新建类,比如线程,尽量进行重用,运用wait和notify,不要每次都新建一个类,用完在设null。后者在其他机型上可以进行(虽然效率不高),但在6681绝对不行,等你重建了3-7次之后,等着当机吧~~~
对于图片,也不能每次都重载, 判断下在创建永远是明智的,网上也有很多图片优化的就不说了。
if(imgs == null)
imgs = new Image[GameData.imgName.length];
声效类,WAV/MIDI/OTT,都可以,推荐顺序是ott>midi>wav,原因不用讲了吧(大小)?
多的想不起了,总结下就一句,要在nokia机器上运行的j2me程序,绝对不要相信WTK模拟器的结果!!!一定要在目标机型的真机上挨个试遍,否则就等着哭吧~~
附上几个6681相关discussion的网址,仍被它折磨着的同志们看看吧:
http://www2.matrix.org.cn/thread.shtml?topicId=30649&forumId=4&fid=4
http://www.j2medev.com/bbs/dispbbs.asp?boardid=11&id=7240
http://j2medev.spaces.live.com/blog/cns!8D09CFF9FE06ED5D!978.entry