前言
——如果想直接看技术这段可以忽略
对于初学J2ME的人来说,如果去市面上挑上几本所谓的教程来学的话还不如奉劝他直接学J2ME的API文档。人家的教程也无非把API翻译了一遍。所以对于J2ME开发人员来说技术上看上去根本没什么含金量。就那么几个类几个函数调来调去的。
呵呵,痛苦的事情也在这里,目前对于大部分支持JAVA程序的手机来说他们提供JAVA虚拟机可用的内存相当的少一般的也就在2MB的样子,内存无疑是检验程序是否给力的一个标准。
前段时间做手机JAVA端程序,老实说我也是菜鸟级人物,当时对RMS操作的一般步骤就是和参考书上一样的。这样的机制在项目后期就暴露了很大的问题:部分机器对多线程处理不友好,使得一些数据根本加载不了;看内存监控器消耗比较多;重要的问题是遇到大批量数据时因为需要加载到内存,此时程序就显得非常卡,相当不给力。
于是乎,我就思考着一种方法,一种能够将内存开销减小并提高存取的效率的方法。
我们知道,J2ME中数据是呈现在画布上的,而当我们将数据对象画到画布上之后数据对象中的一些次要信息就可以释放掉,不需要再停留在内存当中了。
如果一股脑将封装好的数据直接从RMS中读取到一个Vector这样的容器中显然是一种鲁莽的行为,出了数据本身会消耗大量开销外,Vector中每个对数据封装的对象也会消耗内存。
所以我们必须对这样鲁莽的机制进行驯化。驯化方法是这样的。
我们需要对Vector这样的容器进行包装,在数据保存到RMS后不必再将对象数据保存在内存中,因为他已经保存在了RMS中,并且我们知道了读取该记录需要的一个RecordID,所以我们add一个对象后仅保留一个recordID便可。在用Vector一些读取对象时候只需通过拿到的recordID从RMS读取并包装便可。
如此一来,我们在使用数据的时候RMS相当于充当了一个缓存器,保留在内存的仅仅是数据在RMS上所对应的一个recordID而已。
以上只是说道了存取的一个思想,至于代码你可以加我QQ或者MSN我们交流
QQ:273418537 MSN:jasonchan2010@live.cn