国产18禁黄网站免费观看,99爱在线精品免费观看,粉嫩metart人体欣赏,99久久99精品久久久久久,6080亚洲人久久精品

java認(rèn)證:高可移植性J2ME軟件開(kāi)發(fā)筆記

時(shí)間:2009-04-14 12:06:00   來(lái)源:無(wú)憂考網(wǎng)     [字體: ]
1 內(nèi)容介紹
  隨著現(xiàn)在的手機(jī)品牌越來(lái)越多,本來(lái)J2ME的手機(jī)性能相對(duì)于智能機(jī)來(lái)說(shuō)就差,加上現(xiàn)在流行的MTK,這樣導(dǎo)致手機(jī)的CPU,內(nèi)存就更少的了。這篇文章就是怎么樣解決這些小內(nèi)存,CPU,RMS都嚴(yán)重受限的參考文檔。
  預(yù)期讀者
  本文主要適合那些有經(jīng)驗(yàn)的J2ME程序員在優(yōu)化軟件,或者是需要考慮軟件兼容性時(shí)的參考文檔。
  2 優(yōu)化筆記
  J2me程序由于其非凡的運(yùn)行環(huán)境限制,所以優(yōu)化就顯得比較重要,以下是我在學(xué)習(xí)j2me編程所收集的一些技巧和自己的心得。
  1.顯示圖象時(shí)確定好你的fps,先做幾次小實(shí)驗(yàn),這樣能讓你在顯示效果和運(yùn)行速度上有比較好的平衡。
  2.GamaCanvas.getGraphics()每次都會(huì)產(chǎn)生一個(gè)全新的對(duì)象,但是對(duì)這些對(duì)象的操作都是對(duì)同一個(gè)graphics,所以還是只取一次供后面使用。
  3.讓多個(gè)對(duì)象使用同樣的監(jiān)聽(tīng)器,比如讓主MIDlet類(lèi)實(shí)現(xiàn)CommandListener和ItemStateListener接口。
  4.考慮使用手機(jī)開(kāi)發(fā)商提供的一些sdk,沒(méi)人會(huì)比他們更了解他們手機(jī),所以有些時(shí)候能顯著提高速度,特別是是圖片,視頻使用方面。
  這里推薦使用的模擬器是Nokia S40,Moto SDK 6.11 這些模擬器在模擬的過(guò)程中幾乎與真機(jī)一樣。相當(dāng)?shù)臏?zhǔn)確。
  5.使用監(jiān)視工具分析MIDlet的瓶頸,wtk和各個(gè)公司提供的開(kāi)發(fā)包里都會(huì)有,可以找到程序的弱點(diǎn)。假如是在手機(jī)上,用timer測(cè)試你認(rèn)為有可以的地方。
  在這里,開(kāi)發(fā)Http,Socket網(wǎng)絡(luò)的時(shí)候,打開(kāi)相關(guān)的監(jiān)視器,這樣可以知道你的程序到底發(fā)送了些什么數(shù)據(jù)
  6.使用System.gc(),在無(wú)線程阻塞的情況下可以有效的緩解內(nèi)存壓力,但是有些公司不是太推薦使用(如nokia).sun的說(shuō)法也是越低端的機(jī)子執(zhí)行的越慢,總之,慎用吧。
  7.用固定的數(shù)組代替使用Vector。使用System.copyArray等native方法,這樣比你自己寫(xiě)的效率要高
  8.圖片的優(yōu)化?紤]使用設(shè)備的規(guī)格,可能高分辨率的圖片不一定顯示的出來(lái)。一般建議使用128色就可以了。
  9.不用的對(duì)象賦值為null,為更快的回收。特別是字符串,Vector,Hashtable等類(lèi)變量。如果你的class,寫(xiě)了很多的 Hashtable,Vector,Object[]的變量的話,建議你構(gòu)建一個(gè)clear的方法,并在方法里面把那些容器變量先干掉,然后再把 class賦值為null。
  10.用混淆器處理你的類(lèi)文件,防止反編譯,還有一個(gè)好的副作用就是它減小class文件的大小,因?yàn)榛煜魍幂^短的字符串代替原來(lái)的變量或方法名。
  11.若數(shù)據(jù)太大,可以將數(shù)據(jù)編碼為字符串,運(yùn)行時(shí)解碼,或把數(shù)據(jù)存為二進(jìn)制文件并與程序打包,用類(lèi)裝載器的getResourceAsStream方法在運(yùn)行時(shí)存取。
  12.使用現(xiàn)有的類(lèi),比如你使用了GameCanvas,就不用自己生成off-screen,另外像CLDC的profile沒(méi)有構(gòu)造集合類(lèi),所以我們可以用內(nèi)建的Hashtable和Vector類(lèi)來(lái)實(shí)現(xiàn)。
  13.用優(yōu)化軟件jPresto(http://www.s5systems.com/jPresto.htm)---沒(méi)用過(guò),不過(guò)暫且寫(xiě)上吧。
  假如對(duì)文件大小,內(nèi)存限制非常嚴(yán)格,這時(shí)候就只能用一些非常規(guī)的方法了,可能這些方法背離了OO思想,但是多數(shù)情況下,它是起到了非常積極的作用的(但是也可能),假如你更在意于程序的維護(hù)和擴(kuò)展方面,我建議你還是跳過(guò)吧 -_-
  14.把所有資源文件做成一個(gè)數(shù)據(jù)文件。然后在程序中寫(xiě)一個(gè)算法,進(jìn)行解碼
  15.把所有的小圖片文件做成一個(gè)文件,在運(yùn)行時(shí)再"切割"開(kāi)。
  很多張小icon的時(shí)候,可以通過(guò)合并工具把這些icon合并成一種大的png圖片,然后在程序中對(duì)這些圖片進(jìn)行切割。用Image.createImage(src, x,y,w,h)進(jìn)行切割。
  16.使用有限的面向?qū)ο螅驗(yàn)榧兇獾腛O往往意味著更多的虛方法,更多的層次關(guān)系,更多的class
  17.生成盡可能少的class,class都有一定的系統(tǒng)開(kāi)銷(xiāo)。 18.class中生成盡可能少的方法。速度比較:同步方法<接口方法<實(shí)例方法  19.用final static限定方法可以獲得小幅的速度提高。
  20.對(duì)數(shù)據(jù)成員用public限定,來(lái)代替get和set方法,不過(guò)要注重安全性。
  其他歸類(lèi)
  *只優(yōu)化需要的代碼
  *只在有價(jià)值的地方優(yōu)化
  *用profiler來(lái)找要優(yōu)化的地方
  *在具體的設(shè)備上profiler無(wú)能為力,在硬件上使用System timer
  *在于用低級(jí)技術(shù)之前,總是先研究你的代碼并且試著改進(jìn)算法
  *繪圖是慢的,所以盡量節(jié)儉地使用圖形調(diào)用
  *在可以減少繪制區(qū)域的地方使用setClip()
  *盡可能的把東西放到循環(huán)之外
  *拼命地預(yù)先計(jì)算和暫存
  *字符串帶來(lái)垃圾,垃圾不好,所以使用StringBuffers來(lái)代替
  *什么都不假設(shè)
  *可能就使用static final方法,避免synchronized修飾符
  *傳遞盡可能少的參數(shù)到經(jīng)常調(diào)用的方法
  *如果可能,完全地去掉函數(shù)調(diào)用
  *解開(kāi)循環(huán)
  *對(duì)2的冪的乘除運(yùn)算用位移運(yùn)算代替
  *你可以使用位運(yùn)算符代替取模運(yùn)算來(lái)實(shí)現(xiàn)循環(huán)
  *試著用零來(lái)代替和其他數(shù)的比較
  *數(shù)組訪問(wèn)比C要慢,所以暫存數(shù)組元素
  *消去公共的子表達(dá)式
  *局部變量要比引用變量快
  *如果可以callSerially()就不要wait()
  *在switch()中使用小的變量作選項(xiàng)
  *檢查定點(diǎn)數(shù)學(xué)庫(kù)并且優(yōu)化它
  *拆開(kāi)嵌套的FP調(diào)用來(lái)減少類(lèi)型轉(zhuǎn)換
  *除法比乘法慢,所以用乘于倒數(shù)來(lái)代替除法
  *用使用過(guò)和測(cè)試過(guò)的算法
  *為了保護(hù)可移植性,小心地使用私有高性能API。
  J2ME優(yōu)化可能使你的程序在不同的模擬器,不同的設(shè)備下有不同的運(yùn)行效果,所以 優(yōu)化一定要建立在開(kāi)發(fā)設(shè)備的規(guī)格上。
  以上所列舉的方法不一定在所有midp設(shè)備上都起作用,也不一定都適合每一個(gè)程序,總之,應(yīng)該根據(jù)自身的情況。
  3 注意事項(xiàng)
  1.內(nèi)存的管理
  2.圖片資源的管理
  3.圖片資源的管理
  4.字符串的管理
  5.Vector,Hashtabe等管理
  4 參考資料
  ITPUT的移動(dòng)開(kāi)發(fā)技術(shù) 頻道 http://publish.itpub.net/lists/7826/0