随着3G的到来,手机应用好象又开始升温了,不过总体上看,flash在手机应用上还处于起步阶段,把技术转换为简单实用的产品和服务,这中间还有很多路要走。 最近做的东西很杂,包括一个在手机上跑的Demo。环境是flash lite 2.0,在模拟器上跑Demo,一起正常,结果搬到真机上跑,出现了 Problem with content 4运行时错误,程序挂了。翻阅手册,发现是颇经典的“ActionScript Stuck”错误,肯定是哪块代码写的有问题,于是开始优化程序,所有不用的变量全部delete掉,仔细检查所有的循环,把for循环全部改为while循环,数组定长等等,不过错误依旧。
几经分析,最后锁定了下面的代码块:
var i:Number = 0; var len:Number = messages.length; txtField.text = "";</p> <p>while( i < len ){ var s = messages[i]+"/n"; txtField.text += s;</p> <p> i ++; }
仔细一看,恍然大悟,略加修改为:
var i:Number = 0; var len:Number = messages.length; txtField.text = "";</p> <p>var output:String = ""; while( i < len ){ var s = messages[i]+"/n"; output+=s; i ++; } txtField.text = output;
再运行,ok。
按照我的理解是,每次修改动态文本的内容,解释器都会重绘文本对象,而这个动作位于循环中,造成了太多资料开销,结果就崩溃了。修改后,每次一次性更新文本,减少了重绘动作。一般来说,Flash中最耗资源的都是可视对象,因此,减少对可视对象的操作,能节约系统资源。 另外,图片尽量用gif格式。低质量的gif图片在pc上看起来往往色彩不连续,出现色带,但在手机上并无影响,毕竟手机的分辨率要低得多。