<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                > 編寫:[allenlsy](https://github.com/allenlsy) - 原文:[http://developer.android.com/training/improving-layouts/optimizing-layout.html](http://developer.android.com/training/improving-layouts/optimizing-layout.html) 一個常見的誤區是,用最基礎的 Layout 結構可以使 Layout 性能提高。然而,你的程序的每個組件和 Layout 都需要初始化、布局和繪制。例如,嵌套的 LinearLayout 可能會使得 View 的層級結構過深。此外,嵌套使用了 `layout_weight` 參數的 LinearLayout 的計算量會尤其大,因為每個子元素都需要被測量兩次。這對需要多次重復 inflate 的 Layout 尤其需要注意,比如嵌套在 ListView 或 GridView 時。 本課中,你將學習使用 [Hierarchy Viewer](http://developer.android.com/tools/help/hierarchy-viewer.html)和[Layoutopt](http://developer.android.com/tools/help/layoutopt.html)來檢查和優化 Layout。 ### 檢查 Layout Android SDK 工具中有一個叫做 [Hierarchy Viewer](http://developer.android.com/tools/help/hierarchy-viewer.html) 的工具,能夠在程序運行時分析 Layout。你可以用這個工具找到 Layout 的性能瓶頸。 Hierarchy Viewer 會讓你選擇設備或者模擬器上正在運行的進程,然后顯示其 Layout 的樹型結構。每個塊上的交通燈分別代表了它在測量、布局和繪畫時的性能,幫你找出瓶頸部分。 比如,下圖是 ListView 中一個列表項的 Layout 。列表項里,左邊放一個小位圖,右邊是兩個層疊的文字。像這種需要被多次 inflate 的 Layout ,優化它們會有事半功倍的效果。 ![](https://box.kancloud.cn/2015-07-28_55b7247aa6c9e.png) `hierarchyviewer` 這個工具在 `<sdk>/tools/` 中。當打開時,它顯示一張可使用設備的列表,和它正在運行的組件。點擊 **Load View Hierarchy** 來查看所選組件的層級。比如,下圖就是前一個圖中所示 Layout 的層級關系。 ![](https://box.kancloud.cn/2015-07-28_55b7247ab126c.png) 圖中,你可以看到一個三層結構,其中右下角的 TextView 在布局的時候有問題。點擊其中的項會顯示每個步驟所花費的時間。這樣,誰花了多長時間在什么哪個步驟上面,就清晰可見了。 ![](https://box.kancloud.cn/2015-07-28_55b7247abe7d0.png) 可以看到,渲染一個完整的列表項的時間就是: - 測量: 0.977ms - 布局: 0.167ms - 繪制: 2.717ms ### 修正 Layout 上面的 Layout 由于有這個嵌套的 LinearLayout 導致性能太慢,可能的解決辦法是將 Layout 層級扁平化————變淺變寬,而不是又窄又深。RelativeaLayout 作為根節點時就可以達到目的。所以,當換成基于 RelativeLayout 的設計時,你的 Layout 變成了兩層。新的 Layout 變成這樣: ![](https://box.kancloud.cn/2015-07-28_55b7247ae4747.png) 現在渲染列表項的時間: - 測量: 0.598ms - 布局: 0.110ms - 繪制: 2.146ms 可能看起來是很小的進步,但是由于它對列表中每個項都有效,這個時間要翻倍。 這個時間的主要差異是由于在 LinearLayout 中使用 `layout_weight` 所致,因為會減慢“測量”的速度。這只是一個正確使用各種 Layout 的例子,當你使用 `layout_weight` 時有必要慎重。 ### 使用 Lint > 大部分叫做 lint 的編程工具,都是類似于代碼規范的檢測工具。比如JSLint,CSSLinkt, JSONLint 等等。譯者注。 運行 [Lint](http://tools.android.com/tips/lint) 工具來檢查 Layout 可能的優化方法,是個很好的實踐。Lint 已經取代了 Layoutopt 工具,它擁有更強大的功能。Lint 中包含的一些檢測[規則](http://tools.android.com/tips/lint-checks)有: - 使用compound drawable —— 用一個 drawable 替代一個包含 `ImageView` 和 `TextView` 的 `LinearLayout` 時會更有效率。 - 合并根 frame —— 如果 `FrameLayout` 是 Layout 的根節點,并且沒有使用 padding 或者背景等,那么用 merge 標簽替代他們會稍微高效些。 - 沒用的子節點 —— 一個沒有子節點或者背景的 Layout 應該被去掉,來獲得更扁平的層級 - 沒用的父節點 —— 一個節點如果沒有兄弟節點,并且它不是 `ScrollView` 或根節點,沒有背景,這樣的節點應該直接被子節點取代,來獲得更扁平的層級 - 太深的 Layout —— Layout 的嵌套層數太深對性能有很大影響。嘗試使用更扁平的 Layout ,比如 `RelativeLayout` 或 `GridLayout` 來提高性能。一般最多不超過10層。 另一個使用 Lint 的好處就是,它內置于 Android Studio 中。Lint 在你導編譯程序時自動運行。Android Studio 中,你可以為單獨的 build variant 或者所有 variant 運行 lint。 你也可以在 Android Studio 中管理檢測選項,在 **File > Settings > Project Settings** 中。檢測配置頁面會顯示支持的檢測項目。 ![](https://box.kancloud.cn/2015-07-28_55b7247b04f3c.png) Lint 有自動修復、提示建議和直接跳轉到問題處的功能。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看