2004.11.17
唐良
Nokia 60的Symbian 6.0系统的手机,也就是Nokia 3650和Nokia 7650中在执行Image.createImage(byte[] data,int off,int len)的函数的时候,容易出现死机问题。这个问题已经在Nokia的官方开发论坛上得到确认。
我的测试主要是针对Image.createImage函数在创建gif图片的时候出现的问题。我曾经专门针对一段图片的内存块反复创建1000次,图片的大小为18x18左右,测试结果表明,创建到500次以后就容易出现错误。而如果是同样大小的png图片的字节流,创建到1000次,没有出现过错误。
同时,我还发现,如果是使用Image.createImage(String filename)的方式创建gif图片,出现错误的纪律会小一些,但是还是会出现一定几率的错误。
而在Nokia最新的Symbian 7.0系统的手机,比如Nokia 7610,Nokia 6600上,就没有出现过Image.createImage(byte[] data,int off,int len)创建gif图片的错误。那么,估计这是Symbian 6.0针对gif解码的一个bug.
针对J2me中的RecordStore中的内存中用Image.createImage(byte[],int,int)创建GIF图片,则没有出现过异常问题。
奇怪的是,不知道为什么,在我的1000次创建试验中Image.createImage(String filename)方式创建gif图片也出现了错误。这可能跟另外一个问题有关系。
解决之道:
1. 程序初始化的时候,基于Nokia 60的手机内存比较大,可以一次性把图片资源都创建到内存中去,那么以后就不用再创建了,可以大大降低出错的几率。(魔幻之旅2的做法)
2. 本地包中的图片资源不要使用打包的图片,直接使用Image.createImage(String filename)来创建图片。(仙剑的做法)
3. 使用PNG图片。这种办法还没有具体在项目中测试过,但是基于前面的1000次反复测试,应该是可取之道。
另外一点,在仙剑Nokia 3650版本的开发中,发现,如果反复读取一段资源,比如我在显示物品属性的时候,每次显示的时候再去本地包提取资源属性数据出来,那么在这种高频率的资源提取过程中,也发现了随机性的错误。估计也是Symbian 6.0的不稳定因素造成的。解决之道就是一次装载到内存中,然后每次显示的时候直接从内存中去取属性数据。
本文地址:http://com.8s8s.com/it/it13402.htm