欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析安卓(Android)的性能優(yōu)化

 更新時(shí)間:2016年08月31日 09:00:09   作者:愛(ài)小麗  
性能優(yōu)化是一個(gè)大的范疇,如果有人問(wèn)你在Android中如何做性能優(yōu)化的,也許都不知道從哪開(kāi)始說(shuō)起。那么這篇文章我們從布局優(yōu)化和內(nèi)存優(yōu)化兩個(gè)方面來(lái)展開(kāi)說(shuō)如何進(jìn)行Android的性能優(yōu)化。

Android性能的優(yōu)化主要分為兩點(diǎn)

1、布局優(yōu)化

2、內(nèi)存優(yōu)化

布局優(yōu)化

首先來(lái)看一下布局優(yōu)化,系統(tǒng)在渲染UI的時(shí)候會(huì)消耗大量的資源,所以,對(duì)布局的優(yōu)化就顯得尤為重要

避免Overdraw

也就是避免過(guò)度的繪制,過(guò)度的繪制會(huì)浪費(fèi)更多的資源,舉個(gè)例子,Android系統(tǒng)會(huì)默認(rèn)繪制Activity的背景,這時(shí)候我們?cè)僭O(shè)置一個(gè)背景,這樣默認(rèn)的背景就屬于過(guò)度繪制了,在『開(kāi)發(fā)者工具』中有一個(gè)『調(diào)試GPU過(guò)度繪制』的選項(xiàng),我們打開(kāi)就可以通過(guò)顏色來(lái)判斷過(guò)度繪制的次數(shù)

如圖:

所以說(shuō)我們盡可能的增大藍(lán)色區(qū)域,減少紅色區(qū)域

優(yōu)化布局層級(jí)

在Android系統(tǒng)中,系統(tǒng)對(duì)View進(jìn)行測(cè)量、布局、繪制的時(shí)候,都是通過(guò)對(duì)View樹(shù)的遍歷來(lái)進(jìn)行的,所以說(shuō)一個(gè)布局的層級(jí)太多,就會(huì)嚴(yán)重影響測(cè)量、布局、繪制的速度,所以要降低View樹(shù)的高度,Google在文檔中建議布局的層級(jí)不超過(guò)10層,所以還要避免嵌套沒(méi)有用的布局

使用include標(biāo)簽

相信大家都會(huì)在項(xiàng)目的時(shí)候遇到toolbar,或者一個(gè)UI在多個(gè)界面使用的問(wèn)題,遇到這種問(wèn)題的時(shí)候我們一般都會(huì)用include(畢竟大神『第一行代碼』教的好),這樣就減少了代碼冗余,而且還利于后期更改

使用ViewStub實(shí)現(xiàn)View的延時(shí)加載

ViewStub標(biāo)簽和View.GONE的方式差不多,但是ViewStub只會(huì)在顯示的時(shí)候去渲染,而GONE在初始化的時(shí)候就已經(jīng)渲染完畢了,所以相比來(lái)說(shuō)ViewStub的效率更高。

下面來(lái)通過(guò)代碼使用一下ViewStub

首先我們定義一個(gè)布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">

 <TextView
  android:id="@+id/tv"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />

</LinearLayout>

這里面只放了一個(gè)TextView,然后我們?cè)谧约旱牟季种型ㄟ^(guò)ViewStub來(lái)引用他

<Button
 android:id="@+id/btn"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />

<ViewStub
 android:id="@+id/vs"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout="@layout/view_stub"/>

這里的邏輯是點(diǎn)擊按鈕然后出現(xiàn)ViewStub引用的布局(也就是我們上面寫(xiě)的那個(gè)布局文件)

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View view) {
  ViewStub vs = (ViewStub) findViewById(R.id.vs);
  View vsView = vs.inflate();
  TextView tv = (TextView) vsView.findViewById(R.id.tv);
  tv.setText("hahaha");

 }
});

這里想要把ViewStub引用的布局顯示出來(lái)有兩種辦法,一種是ViewStub.setVisibility();另一種就是ViewStub.inflate();這兩種方法的區(qū)別就是inflate()能返回引用的布局,然后可以通過(guò)這個(gè)布局來(lái)找到里面的子View來(lái)進(jìn)行操作

運(yùn)行程序點(diǎn)擊按鈕,就可以看到TextView已經(jīng)顯示出來(lái)了,并且已經(jīng)賦值『hahaha』

Hierarchy Viewer

這個(gè)工具可以顯示我們的布局,但是只可以在模擬器和工廠(chǎng)的Demo機(jī)上用,不過(guò)Google的大神提供了一個(gè)開(kāi)源的項(xiàng)目ViewServer,有興趣的可以看一下。

這個(gè)就不過(guò)多闡述了,有興趣的可以自行查看一下相關(guān)的資料

內(nèi)存優(yōu)化

我們都知道,最近Android的廠(chǎng)商就是在拼配置,其中我們最關(guān)注的就是內(nèi)存幾個(gè)G,但是Android手機(jī)有的內(nèi)存很大,但是很卡,這是因?yàn)橛械氖謾C(jī)軟件在手機(jī)內(nèi)存低的情況下不能被殺死,也就是我們說(shuō)的『防殺』

我們知道內(nèi)存一般分為這幾個(gè)部分

     1、寄存器

     2、棧

     3、堆

     4、靜態(tài)存儲(chǔ)區(qū)

     5、常量池

其中寄存器運(yùn)算速度最快,但是我們?cè)诔绦蚶餆o(wú)法控制

棧里存放基本數(shù)據(jù)類(lèi)型

堆里存放對(duì)象和數(shù)組,在堆中的一般由Java的GC還管理

靜態(tài)存儲(chǔ)區(qū)在固定的位置存放應(yīng)用程序中運(yùn)行時(shí)一直存在的數(shù)據(jù),Java專(zhuān)門(mén)劃分了一個(gè)區(qū)域來(lái)管理靜態(tài)變量

常量池就是該類(lèi)型所使用到的常量的集合

Bitmap的優(yōu)化

我們都知道在Android中是造成OOM的最大威脅,因?yàn)樗加玫膬?nèi)存特別多,所以我們應(yīng)該:

1、使用適當(dāng)分辨率大小的圖片

由于Android在做適配的時(shí)候會(huì)對(duì)不同分辨率的文件夾下的圖片來(lái)進(jìn)行縮放適配,如果圖片的分辨率與資源分辨率不匹配的話(huà)就會(huì)導(dǎo)致消耗更多的資源

2、使用緩存

一般有內(nèi)存緩存和硬盤(pán)緩存

代碼優(yōu)化

     1、對(duì)常量使用static

     2、使用靜態(tài)方法,靜態(tài)方法比普通方法提高15%左右的訪(fǎng)問(wèn)速度

     3、減少?zèng)]有必要的成員變量,如果能定義成局部變量就最好定義成局部變量

     4、減少不必要的對(duì)象

     5、少用枚舉、迭代器

     6、對(duì)Cursor、Receiver、File等對(duì)象,要注意回收和取消注冊(cè)

     7、使用SurfaceView來(lái)代替View進(jìn)行大量并且頻繁的繪圖操作

     8、盡量使用視圖緩存,不是每次都執(zhí)行inflate()來(lái)解析視圖

     9、避免使用反射

     10、使用RenderScriptOpenGL來(lái)進(jìn)行非常復(fù)雜的繪圖操作

總結(jié)

以上就是對(duì)Android性能優(yōu)化的一些點(diǎn),如果你用AndroidStudio的話(huà),AndroidStudio提供了一個(gè)內(nèi)存監(jiān)視的工具,還是很好用的,如果你沒(méi)用AndroidStudio,那么我建議你使用AndroidStudio~

另外優(yōu)化也沒(méi)有絕對(duì)的完美,每一次優(yōu)化都是基于當(dāng)前的環(huán)境來(lái)做的,要明白溝通是最好的優(yōu)化,不盲從,不隨便,三思而后行。希望這篇文章對(duì)大家開(kāi)發(fā)Android能有所幫助。

相關(guān)文章

  • 基于Android自定義控件實(shí)現(xiàn)雷達(dá)效果

    基于Android自定義控件實(shí)現(xiàn)雷達(dá)效果

    這篇文章主要為大家詳細(xì)介紹了基于Android自定義控件實(shí)現(xiàn)雷達(dá)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 實(shí)例講解Android中的AutoCompleteTextView自動(dòng)補(bǔ)全組件

    實(shí)例講解Android中的AutoCompleteTextView自動(dòng)補(bǔ)全組件

    AutoCompleteTextView組件被用在輸入框中能實(shí)現(xiàn)輸入內(nèi)容自動(dòng)補(bǔ)全的功能,類(lèi)似于大家平時(shí)用Google時(shí)的輸入聯(lián)想,這里我們來(lái)用實(shí)例講解Android中的AutoCompleteTextView自動(dòng)補(bǔ)全組件,特別是實(shí)現(xiàn)郵箱地址補(bǔ)全的例子,非常實(shí)用
    2016-05-05
  • Android RxJava創(chuàng)建操作符Timer的方法

    Android RxJava創(chuàng)建操作符Timer的方法

    這篇文章主要為大家詳細(xì)介紹了Android RxJava創(chuàng)建操作符Timer的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 360瀏覽器文本框獲得焦點(diǎn)后被android軟鍵盤(pán)遮罩該怎么辦

    360瀏覽器文本框獲得焦點(diǎn)后被android軟鍵盤(pán)遮罩該怎么辦

    最近接了個(gè)項(xiàng)目,項(xiàng)目需求是這樣的,站點(diǎn)上篩選按鈕點(diǎn)擊后彈出層(fixed),當(dāng)輸入框獲取焦點(diǎn)以后彈出系統(tǒng)自帶的軟鍵盤(pán),在android上十款瀏覽器挨個(gè)測(cè)試比對(duì),發(fā)現(xiàn)在360瀏覽器彈出鍵盤(pán)以后獲取焦點(diǎn)的文本框被軟鍵盤(pán)覆蓋了,下面分享我的解決辦法
    2015-12-12
  • Android Fragment的具體使用方式詳解

    Android Fragment的具體使用方式詳解

    Fragment是Android3.0后引入的一個(gè)新的API,他出現(xiàn)的初衷是為了適應(yīng)大屏幕的平板電腦,?當(dāng)然現(xiàn)在他仍然是平板APP?UI設(shè)計(jì)的寵兒,而且我們普通手機(jī)開(kāi)發(fā)也會(huì)加入這個(gè)Fragment,?我們可以把他看成一個(gè)小型的Activity,又稱(chēng)Activity片段
    2022-12-12
  • Android指紋識(shí)別功能

    Android指紋識(shí)別功能

    這篇文章主要為大家詳細(xì)介紹了Android指紋識(shí)別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android開(kāi)發(fā)實(shí)戰(zhàn)之漂亮的ViewPager引導(dǎo)頁(yè)

    Android開(kāi)發(fā)實(shí)戰(zhàn)之漂亮的ViewPager引導(dǎo)頁(yè)

    這篇文章主要介紹了Android開(kāi)發(fā)實(shí)戰(zhàn)中漂亮ViewPager引導(dǎo)頁(yè)的制作過(guò)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 安卓APP測(cè)試之使用Burp Suite實(shí)現(xiàn)HTTPS抓包方法

    安卓APP測(cè)試之使用Burp Suite實(shí)現(xiàn)HTTPS抓包方法

    這篇文章主要介紹了安卓APP測(cè)試之使用Burp Suite實(shí)現(xiàn)HTTPS抓包方法,本文詳解講解了測(cè)試環(huán)境和各個(gè)軟件的配置方法,需要的朋友可以參考下
    2015-04-04
  • android閱讀器長(zhǎng)按選擇文字功能實(shí)現(xiàn)代碼

    android閱讀器長(zhǎng)按選擇文字功能實(shí)現(xiàn)代碼

    本篇文章主要介紹了android閱讀器長(zhǎng)按選擇文字功能實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • Android中修改TabLayout底部導(dǎo)航條Indicator長(zhǎng)短的方法

    Android中修改TabLayout底部導(dǎo)航條Indicator長(zhǎng)短的方法

    Tablayout在我們?nèi)粘i_(kāi)發(fā)中經(jīng)常會(huì)遇到,下面這篇文章主要給大家介紹了在Android中修改TabLayout底部導(dǎo)航條Indicator長(zhǎng)短的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來(lái)一起看看吧。
    2017-06-06

最新評(píng)論