J2me程序由于其特殊的運(yùn)行環(huán)境限制,所以優(yōu)化就顯得比較重要,以下是我在學(xué)習(xí)j2me編程所收集的一些技巧和自己的心得。
本文主要是說明j2me平臺上的特殊優(yōu)化方法,與j2se重復(fù)的一些技巧就不再贅述了。
1.顯示圖象時確定好你的fps,最好先做幾次小實(shí)驗(yàn),這樣能讓你在顯示效果和運(yùn)行速度上有比較好的平衡。
2.GamaCanvas.getGraphics()每次都會產(chǎn)生一個全新的對象,但是對這些對象的操作都是對同一個graphics,所以還是只取一次供后面使用。
3.讓多個對象使用同樣的監(jiān)聽器,比如讓主MIDlet類實(shí)現(xiàn)CommandListener和ItemStateListener接口。
4.考慮使用手機(jī)開發(fā)商提供的一些sdk,沒人會比他們更了解他們手機(jī),所以有些時候能顯著提高速度,特別是圖片,視頻使用方面。
5.使用監(jiān)視工具分析MIDlet的瓶頸,wtk和各個公司提供的開發(fā)包里都會有,可以找到程序的弱點(diǎn)。如果是在手機(jī)上,用timer測試你認(rèn)為有可以的地方。
6.使用System.gc(),在無線程阻塞的情況下可以有效的緩解內(nèi)存壓力,但是有些公司不是太推薦使用(如nokia).sun的說法也是越低端的機(jī)子執(zhí)行的越慢,總之,慎用吧。
7.用固定的數(shù)組代替使用Vector。
8.圖片的優(yōu)化。考慮使用設(shè)備的規(guī)格,可能高分辨率的圖片不一定顯示的出來。
9.不用的對象賦值為null,為更快的回收。
10.用混淆器處理你的類文件,防止反編譯,還有一個好的副作用就是它減小class文件的大小,因?yàn)榛煜魍幂^短的字符串代替原來的變 量或方法名。
11.若數(shù)據(jù)太大,可以將數(shù)據(jù)編碼為字符串,運(yùn)行時解碼,或把數(shù)據(jù)存為二進(jìn)制文件并與程序打包,用類裝載器的getResourceAsStream方法在運(yùn)行時存取。
12.使用現(xiàn)有的類,比如你使用了GameCanvas,就不用自己生成off-screen,另外像CLDC的profile沒有構(gòu)造集合類,所以我們可以用內(nèi)建的Hashtable和Vector類來實(shí)現(xiàn)。
13.用優(yōu)化軟件jPresto(http://www.s5systems.com/jPresto.htm)---沒用過,不過暫且寫上吧。
如果對文件大小,內(nèi)存限制非常嚴(yán)格,這時候就只能用一些非常規(guī)的方法了,可能這些方法背離了OO思想,但是多數(shù)情況下,它是起到了非常積極的作用的(但是也可能),假如你更在意于程序的維護(hù)和擴(kuò)展方面,我建議你還是跳過吧。-_-||
14.把所有資源文件做成一個數(shù)據(jù)文件。
15.把所有的小圖片文件做成一個文件,在運(yùn)行時再"切割"開。
16.使用有限的面向?qū)ο螅驗(yàn)榧兇獾腛O往往意味著更多的虛方法,更多的層次關(guān)系,更多的class。
17.生成盡可能少的class,class都有一定的系統(tǒng)開銷。
18.class中生成盡可能少的方法。速度比較:同步方法<接口方法<實(shí)例方法<final方法<靜態(tài)方法。
19.用final static限定方法可以獲得小幅的速度提高。
20.對數(shù)據(jù)成員用public限定,來代替get和set方法,不過要注意安全性。
J2ME優(yōu)化可能使你的程序在不同的模擬器,不同的設(shè)備下有不同的運(yùn)行效果,所以 優(yōu)化一定要建立在開發(fā)設(shè)備的規(guī)格上。
以上所列舉的方法不一定在所有midp設(shè)備上都起作用,也不一定都適合每一個程序,總之,應(yīng)該根據(jù)自身的情況。
本文主要是說明j2me平臺上的特殊優(yōu)化方法,與j2se重復(fù)的一些技巧就不再贅述了。
1.顯示圖象時確定好你的fps,最好先做幾次小實(shí)驗(yàn),這樣能讓你在顯示效果和運(yùn)行速度上有比較好的平衡。
2.GamaCanvas.getGraphics()每次都會產(chǎn)生一個全新的對象,但是對這些對象的操作都是對同一個graphics,所以還是只取一次供后面使用。
3.讓多個對象使用同樣的監(jiān)聽器,比如讓主MIDlet類實(shí)現(xiàn)CommandListener和ItemStateListener接口。
4.考慮使用手機(jī)開發(fā)商提供的一些sdk,沒人會比他們更了解他們手機(jī),所以有些時候能顯著提高速度,特別是圖片,視頻使用方面。
5.使用監(jiān)視工具分析MIDlet的瓶頸,wtk和各個公司提供的開發(fā)包里都會有,可以找到程序的弱點(diǎn)。如果是在手機(jī)上,用timer測試你認(rèn)為有可以的地方。
6.使用System.gc(),在無線程阻塞的情況下可以有效的緩解內(nèi)存壓力,但是有些公司不是太推薦使用(如nokia).sun的說法也是越低端的機(jī)子執(zhí)行的越慢,總之,慎用吧。
7.用固定的數(shù)組代替使用Vector。
8.圖片的優(yōu)化。考慮使用設(shè)備的規(guī)格,可能高分辨率的圖片不一定顯示的出來。
9.不用的對象賦值為null,為更快的回收。
10.用混淆器處理你的類文件,防止反編譯,還有一個好的副作用就是它減小class文件的大小,因?yàn)榛煜魍幂^短的字符串代替原來的變 量或方法名。
11.若數(shù)據(jù)太大,可以將數(shù)據(jù)編碼為字符串,運(yùn)行時解碼,或把數(shù)據(jù)存為二進(jìn)制文件并與程序打包,用類裝載器的getResourceAsStream方法在運(yùn)行時存取。
12.使用現(xiàn)有的類,比如你使用了GameCanvas,就不用自己生成off-screen,另外像CLDC的profile沒有構(gòu)造集合類,所以我們可以用內(nèi)建的Hashtable和Vector類來實(shí)現(xiàn)。
13.用優(yōu)化軟件jPresto(http://www.s5systems.com/jPresto.htm)---沒用過,不過暫且寫上吧。
如果對文件大小,內(nèi)存限制非常嚴(yán)格,這時候就只能用一些非常規(guī)的方法了,可能這些方法背離了OO思想,但是多數(shù)情況下,它是起到了非常積極的作用的(但是也可能),假如你更在意于程序的維護(hù)和擴(kuò)展方面,我建議你還是跳過吧。-_-||
14.把所有資源文件做成一個數(shù)據(jù)文件。
15.把所有的小圖片文件做成一個文件,在運(yùn)行時再"切割"開。
16.使用有限的面向?qū)ο螅驗(yàn)榧兇獾腛O往往意味著更多的虛方法,更多的層次關(guān)系,更多的class。
17.生成盡可能少的class,class都有一定的系統(tǒng)開銷。
18.class中生成盡可能少的方法。速度比較:同步方法<接口方法<實(shí)例方法<final方法<靜態(tài)方法。
19.用final static限定方法可以獲得小幅的速度提高。
20.對數(shù)據(jù)成員用public限定,來代替get和set方法,不過要注意安全性。
J2ME優(yōu)化可能使你的程序在不同的模擬器,不同的設(shè)備下有不同的運(yùn)行效果,所以 優(yōu)化一定要建立在開發(fā)設(shè)備的規(guī)格上。
以上所列舉的方法不一定在所有midp設(shè)備上都起作用,也不一定都適合每一個程序,總之,應(yīng)該根據(jù)自身的情況。