1. 程式人生 > >Andorid 詳解-佈局優化,Android與Linux關係

Andorid 詳解-佈局優化,Android與Linux關係

這篇文章的由來——閒來無事隨便翻找了下Boss 招聘,發現一家公司,在騰訊創業大廈,距離住所很近。最主要的是招聘簡介裡所介紹的內容:團隊成員來自 北大,清華,北郵 BAT等知名網路公司。。。然後我膨脹的自信心,想嘗試下看看自己的水平,抽了一天調休,就過去了。結果 被完虐,各種完虐,第一個問題,是技術總監提出來的。
Android和Linux的關係
Android基於Linux核心 我印象中的答案。
還有呢! 沉默,然後 技術總監有問了幾個其他問題: 沒太記住,例如什麼算一個應用等等。。自己的計算機基礎確實垃圾,我依然保持沉默。然後技術總監就不說話了,旁邊的技術就開始詢問一些android使用技術相關的問題了。

為了加深印象,我百度下了Android 於 Linux的關係。

雖然android基於Linux核心,但是它和linux之間有很大的差別,比如Android在linux的基礎上添加了自己所持有的驅動程式。
先從linux的特性上看,Android為什麼選擇Linux核心
1、強大的記憶體管理,和程序管理方案。
2、基於許可權的安全模式
3、支援共享庫
4、經過認證的驅動模式
5、Linux本身就是一個開源專案

那麼 Anroid 不是 linux
1、沒有本地視窗系統(沒有glibc的支援)GNU釋出執行的Libc庫。glibc是linux系統中最底層的api

什麼是本地視窗系統呢?本地視窗系統是指GNU/Linux上的X視窗系統,或者Mac OS的Quartz等。不同的作業系統的視窗系統可能不一樣,Android並沒有使用(也不需要使用)Linux的X視窗系統,這是Android不是Linux的一個基本原因。

2、它並不包含一整套標準的Linux使用程式

由於Android最初用於一些便攜的移動裝置上,所以,可能出於效率等方面的考慮,Android並沒有採用glibc作為C庫,而是Google自己開發了一套Bionic Libc來代替glibc。

3、它增強了Linux以支援其特有的驅動

到此打住,下面會是技術開發詢問的一些Andorid問題,一些回答上來了,一些知道但是說不出來(相信你們也會有我這樣的困境,作為一個IT從業人員,英語問題,絕對是致病問題),這裡我就不場景植入我的回答了,貼出來點網上查找了一些標準答案。

第一題: 程式優化
佈局優化

優化佈局層級:
        基本原則;在android系統中,對不view進行測量繪製時,都是對view數的遍歷操作。如果view的層級太多,就會嚴重影響測量佈局繪製的速度。Google也在API文件中提到View的層級不宜超過10層,早起Google在Android中使用LinearLayout做為預設的跟佈局,現在android預設的事RelativeLayout,原因就是減少佈局層級的原因。

android提供 <include> <marge> <Viewstub>
使用<include>標籤重用layout佈局,沒啥說的。

<marge>標籤在UI的結構優化中起著非常重要的作用,它可以刪減多餘的層級,例如你的主佈局檔案是垂直佈局,引入了一個垂直佈局的include,這是如果include佈局使用的LinearLayout就沒意義了,使用的話反而減慢你的UI表現。這時可以使用<merge/>標籤優化。
    <merge xmlns:android="http://schemas.android.com/apk/res/android">  

        <Button  
            android:layout_width="fill_parent"   
            android:layout_height="wrap_content"  
            android:text="@string/add"/>  

        <Button  
            android:layout_width="fill_parent"   
            android:layout_height="wrap_content"  
            android:text="@string/delete"/>  

    </merge>  
<ViewStub> 懶載入佈局,android提供了ViewStub一個非常輕量級控制元件。(為什麼:它沒有大小,沒有繪製功能,也不參與佈局,資源消耗非常低)可以在需要的時候進行載入。
並且ViewStub只能infalte一次,之後就會被制空,(所以使用場景 是一個佈局在infalte之後就不會進行操作,例如:列表載入資料,為空資料的時候,顯示的預設圖片)必然view被長期引用,佔用記憶體。另外注意:ViewStub只能引用佈局,沒辦法直接引用控制元件、可以在佈局裡面新增控制元件。
<ViewStub   
    android:id="@+id/viewstub_demo_image"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_marginLeft="5dip"  
    android:layout_marginRight="5dip"  
    android:layout="@layout/佈局檔案"/>  `
        ViewStub stub = (ViewStub) findViewById(R.id.viewstub_demo_text);  
        stub.inflate();  
        TextView text = (TextView) findViewById(R.id.viewstub_demo_textview);  
        text.setText("改變文字");  

以上就是andorid 提供的標籤,來簡化佈局層級,但是在開發中,為了保證的開發進度,一般不會在初次寫的時候就注意使用這些標籤。也可能是我並沒有養成一個很好的習慣。那麼肯定會有一個返工的過程。返工過程中,再次看自己寫的程式碼。會有一種疑惑,這麻痺是我寫的嗎?

這個時候就需要一個 來幫助我們優化佈局的工具了
HierarchyViewer
Hierarchy Viewer是隨Android SDK釋出的工具,位於Android SDK/tools/hierarchyviewer.bat

具體可百度