因?yàn)槭謾C(jī)CPU和內(nèi)存受到限制,過多使用內(nèi)存會可能會導(dǎo)致內(nèi)存溢出、過度使用CPU可能會導(dǎo)致手機(jī)卡頓,從而出現(xiàn)了我們的性能優(yōu)化
性能優(yōu)化呢首先從兩發(fā)面著手,分別是布局優(yōu)化和內(nèi)存優(yōu)化,下面我們先說一下布局優(yōu)化:
1布局優(yōu)化簡單說就是能復(fù)用的就復(fù)用,這樣可以減少沒必要的Id 從而在R文件中占用沒必要的空間
2如果當(dāng)前頁面的布局很繁瑣,涉及到布局層級過多,建議使用RelativeLayout(相對布局)
如果布局層級少,就是用LinearLayout(線性布局)
布局優(yōu)化的原理就是,布局層級少、繪制的工作量少、繪制速度快、性能提高、從而達(dá)到理想的效果。
接下來說一下內(nèi)存的優(yōu)化:
內(nèi)存優(yōu)化分為? 內(nèi)存泄漏的優(yōu)化,BitMap的優(yōu)化,ListView的優(yōu)化,和線程優(yōu)化。
我們寫的單例模式(咱們通常引用的Activity的上下文,單例模式的類是靜態(tài)類,當(dāng)Activity銷毀的時候,這個靜態(tài)類還保持著Activity的引用,這就造成GC無法回收從而造成內(nèi)存泄漏)
解決方法:把咱寫的App 中的Activity上下文,在OnPuse()方法里面將其致null 即可
Bitmap對圖片的一個壓縮的優(yōu)化,主要就是通過Options計算出二次采樣率然后設(shè)置inSampleSize屬性按幾倍進(jìn)行壓縮,從而得到圖片的一個優(yōu)化。對Bitmap"對象"的優(yōu)化使用inBitmap的主要作用是復(fù)用之前bitmap在內(nèi)存中申請的內(nèi)存,其實(shí)這是對象池的原理,以解決對象頻繁創(chuàng)建再回收的效率問題。(inBitmap只能在3.0以后使用。
????3.屬性動畫導(dǎo)致內(nèi)存泄漏 (在android3.0 Google 提供了屬性動畫),動畫播放完之后, 盡管我們看不到動畫的播放效果,但在內(nèi)部處于無限循環(huán)播放的狀態(tài)。
解決辦法:解決方法就是在onDestory或動畫結(jié)束監(jiān)聽中調(diào)用animator.cancle()
.集合對象沒有清理導(dǎo)致的內(nèi)存泄漏,我們通常把一些對象的引用加入到了集合中,當(dāng)我們不需要該對象時,如果沒有把它的引用從集合中清理掉,這樣這個集合就會越來越大。
????????5.資源對象沒有手動關(guān)閉或處理,資源性對象(BraodcastReceiver,ContentObserver,F(xiàn)ile,Cursor,Stream,Bitmap)導(dǎo)致的內(nèi)存泄漏。