android常用優(yōu)化方案

一惯退,性能優(yōu)化:

1:優(yōu)化Dalvik虛擬機(jī)的堆內(nèi)存荆萤。(此方法在2.2以上版本不再提供)

float TARGET_HEAP_UTILIZATION = 0.75f; 

在程序onCreate時(shí)就可以調(diào)用

VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);

此方法可以增強(qiáng)程序堆內(nèi)存的處理效率斯棒。

2:強(qiáng)制定義自己軟件的堆內(nèi)存大小(此方法在2.2以上版本不再提供)

private final static int CWJ_HEAP_SIZE = 6* 1024* 1024;
VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);//設(shè)置最小heap內(nèi)存為6MB大小

3玉吁,圖片處理

BitmapFactory.Options options =new BitmapFactory.Options();
options.inSampleSize =2;//圖片寬高都為原來(lái)的二分之一剿涮,即圖片為原來(lái)的四分之一
Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri),null, options);
bitmap.recycle();  //回收釋放內(nèi)存

4:UI優(yōu)化

     1)言津,盡量利用系統(tǒng)定義的id  比如:android:id="@android:id/list" //可以減少內(nèi)存的使用,又可以減少部分工作量取试,也可以縮減程序安裝包的大小
     2)悬槽,盡量使用android系統(tǒng)的圖片資源
        android:icon="@*android:drawable/ic_menu_attachment"(注意這里的*不能省略,因?yàn)锳ndroid中沒(méi)有公開(kāi)的圖片資源瞬浓,在xml中直接應(yīng)用會(huì)報(bào)錯(cuò))
     3)初婆,盡量使用android的字符串資源
       android:text="@android:string/yes"    android:text="@android:string/no"這樣既節(jié)省空間,而且直接支持字符串國(guó)際化。
     4)磅叛,使用系統(tǒng)的Style
        android:textAppearance="?android:attr/textAppearanceMedium"
     5)屑咳,使用系統(tǒng)的顏色資源
        android:background ="@android:color/transparent"
        Android系統(tǒng)本身有很多資源在應(yīng)用中都可以直接使用,具體的弊琴,可以進(jìn)入android-sdk的相應(yīng)文件夾中去查看乔宿。例如:可以進(jìn)入$android-sdk$\platforms\android-8\data\res,里面的系統(tǒng)資源就一覽無(wú)余了访雪。
     6),重復(fù)的布局用include標(biāo)簽重用Layout
     7)掂林,在初始化狀態(tài)下不需要顯示的布局使用ViewStub標(biāo)簽臣缀。
            <ViewStub android:id="@+id/stub_import"
                android:inflatedId="@+id/panel_import"
                android:layout="@layout/progress_overlay"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom"/>
ViewStub是一個(gè)隱藏的,不占用內(nèi)存空間的視圖對(duì)象泻帮,它可以在運(yùn)行時(shí)延遲加載布局資源文件精置。當(dāng)ViewStub被設(shè)置為可見(jiàn),或者調(diào)用inflate()函數(shù)時(shí)锣杂,才會(huì)真的去加載這個(gè)布局資源文件脂倦。該ViewStub在加載視圖時(shí)會(huì)在父容器中替換它本身。因此元莫,ViewStub會(huì)一直存在于視圖中赖阻,直到調(diào)用setVisibility(int)或者inflate()為止。ViewStub的布局參數(shù)會(huì)隨著加載的視圖數(shù)一同被添加到ViewStub父容器踱蠢。同樣火欧,也可以通過(guò)使用inflated Id屬性來(lái)定義或重命名要加載的視圖對(duì)象的Id值。
8)茎截,在編寫布局時(shí)苇侵,盡量少的重疊背景,過(guò)多的背景顏色重疊會(huì)導(dǎo)致過(guò)度繪制(Overdraw影響性能)企锌。比如某個(gè)Activity有一個(gè)背景榆浓,然后里面 的Layout又有自己的背景,同時(shí)子View又分別有自己的背景撕攒。

二陡鹃,代碼優(yōu)化

1,注意靜態(tài)變量的使用打却。
在代碼優(yōu)化的過(guò)程中杉适,我們需要對(duì)代碼中的靜態(tài)變量特別留意。靜態(tài)變量是類相關(guān)的變量柳击,它的生命周期是從這個(gè)類被聲明猿推,到這個(gè)類徹底被垃圾回收器回收才會(huì)被銷毀。所以,一般情況下蹬叭,靜態(tài)變量從所在的類被使用開(kāi)始就要一直占用著內(nèi)存空間藕咏,直到程序退出。如果不注意秽五,靜態(tài)變量引用了占用大量?jī)?nèi)存的資源孽查,造成垃圾回收器無(wú)法對(duì)內(nèi)存進(jìn)行回收,就可能造成內(nèi)存的浪費(fèi)坦喘。

2盲再,資源及時(shí)回收,比如cursor.close(); bitmap.recycle();

3瓣铣,程序中為了滿足需求必須使用Context時(shí) 盡量使用Application Context答朋,因?yàn)锳pplication Context的生命周期比較長(zhǎng),應(yīng)用他不會(huì)導(dǎo)致內(nèi)存泄露棠笑。

4梦碗,在ListView中不要使用線程,因?yàn)榫€程的生命周期不可控蓖救。

5洪规,在比較占用內(nèi)存的地方,比如圖片的使用循捺,盡量使用軟應(yīng)用和弱應(yīng)用斩例。

定義一個(gè)HashMap ,保存軟應(yīng)用對(duì)象         
private Map<String,SoftRefrence<Bitmap>> imageCache = new HashMap<String,SoftRefrence<Bitmap>>();

再來(lái)定義一個(gè)方法,保存Bitmap的軟應(yīng)用到HashMap巨柒;
public void addBitmapToCache(String path) {
     // 強(qiáng)引用的Bitmap對(duì)象
    Bitmap bitmap = BitmapFactory.decodeFile(path);
    // 軟引用的Bitmap對(duì)象
    SoftReference softBitmap =new SoftReference(bitmap);
    // 添加該對(duì)象到Map中使其緩存
    imageCache.put(path, softBitmap);
}
獲取的時(shí)候樱拴,可以通過(guò)SoftReference的get()方法得到Bitmap對(duì)象
public Bitmap getBitmapByPath(String path) {
    // 從緩存中取軟引用的Bitmap對(duì)象
    SoftReference softBitmap = imageCache.get(path);
    // 判斷是否存在軟引用
    if(softBitmap ==null) {
        return null;
    }
    // 取出Bitmap對(duì)象,如果由于內(nèi)存不足Bitmap被回收洋满,將取得空
    Bitmap bitmap = softBitmap.get();
    return bitmap;
}

使用軟引用以后晶乔,在OutOfMemory異常發(fā)生之前,這些緩存的圖片資源的內(nèi)存空間可以被釋放掉的,從而避免內(nèi)存達(dá)到上限,避免Crash發(fā)生哥攘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豆赏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裆泳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡柠硕,警方通過(guò)查閱死者的電腦和手機(jī)工禾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門运提,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人闻葵,你說(shuō)我怎么就攤上這事民泵。” “怎么了槽畔?”我有些...
    開(kāi)封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵栈妆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我厢钧,道長(zhǎng)鳞尔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任早直,我火速辦了婚禮铅檩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘莽鸿。我一直安慰自己,他們只是感情好拾给,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布祥得。 她就那樣靜靜地躺著,像睡著了一般蒋得。 火紅的嫁衣襯著肌膚如雪级及。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天额衙,我揣著相機(jī)與錄音饮焦,去河邊找鬼。 笑死窍侧,一個(gè)胖子當(dāng)著我的面吹牛县踢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伟件,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼硼啤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了斧账?” 一聲冷哼從身側(cè)響起谴返,我...
    開(kāi)封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咧织,沒(méi)想到半個(gè)月后嗓袱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡习绢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年渠抹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逼肯,死狀恐怖耸黑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情篮幢,我是刑警寧澤大刊,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站三椿,受9級(jí)特大地震影響缺菌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搜锰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一伴郁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛋叼,春花似錦焊傅、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至歌馍,卻和暖如春握巢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背松却。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工暴浦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晓锻。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓歌焦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親砚哆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子同规,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司窟社,掛了不少券勺,但最終還是拿到小米、百度灿里、阿里关炼、京東、新浪匣吊、CVTE儒拂、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,254評(píng)論 11 349
  • 被文同時(shí)發(fā)布在CSDN上寸潦,歡迎查看。 APP內(nèi)存的使用社痛,是評(píng)價(jià)一款應(yīng)用性能高低的一個(gè)重要指標(biāo)见转。雖然現(xiàn)在智能手機(jī)的內(nèi)...
    大圣代閱讀 4,823評(píng)論 2 54
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,182評(píng)論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法蒜哀,內(nèi)部類的語(yǔ)法斩箫,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法撵儿,線程的語(yǔ)...
    子非魚_t_閱讀 31,643評(píng)論 18 399
  • 懵懂的年紀(jì)淀歇,年少而又輕狂易核!那些少年的模樣在多年以后的今天,也都慢慢變了浪默,或成熟牡直,或干練,或靦腆依舊纳决!l 有沒(méi)有那么...
    嫡心閱讀 159評(píng)論 0 0