Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 淺析安卓(Android)的性能優化

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

編輯:關於Android編程

Android性能的優化主要分為兩點

1、布局優化

2、內存優化

布局優化

首先來看一下布局優化,系統在渲染UI的時候會消耗大量的資源,所以,對布局的優化就顯得尤為重要

避免Overdraw

也就是避免過度的繪制,過度的繪制會浪費更多的資源,舉個例子,Android系統會默認繪制Activity的背景,這時候我們再設置一個背景,這樣默認的背景就屬於過度繪制了,在『開發者工具』中有一個『調試GPU過度繪制』的選項,我們打開就可以通過顏色來判斷過度繪制的次數

如圖:

所以說我們盡可能的增大藍色區域,減少紅色區域

優化布局層級

在Android系統中,系統對View進行測量、布局、繪制的時候,都是通過對View樹的遍歷來進行的,所以說一個布局的層級太多,就會嚴重影響測量、布局、繪制的速度,所以要降低View樹的高度,Google在文檔中建議布局的層級不超過10層,所以還要避免嵌套沒有用的布局

使用include標簽

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

使用ViewStub實現View的延時加載

ViewStub標簽和View.GONE的方式差不多,但是ViewStub只會在顯示的時候去渲染,而GONE在初始化的時候就已經渲染完畢了,所以相比來說ViewStub的效率更高。

下面來通過代碼使用一下ViewStub

首先我們定義一個布局文件

<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>

這裡面只放了一個TextView,然後我們在自己的布局中通過ViewStub來引用他

<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"/>

這裡的邏輯是點擊按鈕然後出現ViewStub引用的布局(也就是我們上面寫的那個布局文件)

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引用的布局顯示出來有兩種辦法,一種是ViewStub.setVisibility();另一種就是ViewStub.inflate();這兩種方法的區別就是inflate()能返回引用的布局,然後可以通過這個布局來找到裡面的子View來進行操作

運行程序點擊按鈕,就可以看到TextView已經顯示出來了,並且已經賦值『hahaha』

Hierarchy Viewer

這個工具可以顯示我們的布局,但是只可以在模擬器和工廠的Demo機上用,不過Google的大神提供了一個開源的項目ViewServer,有興趣的可以看一下。

這個就不過多闡述了,有興趣的可以自行查看一下相關的資料

內存優化

我們都知道,最近Android的廠商就是在拼配置,其中我們最關注的就是內存幾個G,但是Android手機有的內存很大,但是很卡,這是因為有的手機軟件在手機內存低的情況下不能被殺死,也就是我們說的『防殺』

我們知道內存一般分為這幾個部分

     1、寄存器

     2、棧

     3、堆

     4、靜態存儲區

     5、常量池

其中寄存器運算速度最快,但是我們在程序裡無法控制

棧裡存放基本數據類型

堆裡存放對象和數組,在堆中的一般由Java的GC還管理

靜態存儲區在固定的位置存放應用程序中運行時一直存在的數據,Java專門劃分了一個區域來管理靜態變量

常量池就是該類型所使用到的常量的集合

Bitmap的優化

我們都知道在Android中是造成OOM的最大威脅,因為它占用的內存特別多,所以我們應該:

1、使用適當分辨率大小的圖片

由於Android在做適配的時候會對不同分辨率的文件夾下的圖片來進行縮放適配,如果圖片的分辨率與資源分辨率不匹配的話就會導致消耗更多的資源

2、使用緩存

一般有內存緩存和硬盤緩存

代碼優化

     1、對常量使用static

     2、使用靜態方法,靜態方法比普通方法提高15%左右的訪問速度

     3、減少沒有必要的成員變量,如果能定義成局部變量就最好定義成局部變量

     4、減少不必要的對象

     5、少用枚舉、迭代器

     6、對CursorReceiverFile等對象,要注意回收和取消注冊

     7、使用SurfaceView來代替View進行大量並且頻繁的繪圖操作

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

     9、避免使用反射

     10、使用RenderScriptOpenGL來進行非常復雜的繪圖操作

總結

以上就是對Android性能優化的一些點,如果你用AndroidStudio的話,AndroidStudio提供了一個內存監視的工具,還是很好用的,如果你沒用AndroidStudio,那麼我建議你使用AndroidStudio~

另外優化也沒有絕對的完美,每一次優化都是基於當前的環境來做的,要明白溝通是最好的優化,不盲從,不隨便,三思而後行。希望這篇文章對大家開發Android能有所幫助。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved