<form id="s3k3o"></form>

    <button id="s3k3o"></button>

    1. <rp id="s3k3o"><ruby id="s3k3o"><input id="s3k3o"></input></ruby></rp><th id="s3k3o"><track id="s3k3o"><video id="s3k3o"></video></track></th>
    2. <li id="s3k3o"><tr id="s3k3o"><u id="s3k3o"></u></tr></li>

    3. 當前位置: 網站首頁  >> 知識庫  >> Android  >> 查看詳情

      Android高效代碼注意什么

      發布時間:2019-04-10 11:46:37  瀏覽次數:1340 
      Android高效代碼注意什么?

       1, Avoid Creating Objects 

      能不使用包裝類就不使用包裝類。

      盡量使用 StringBuffer 來處理字符串

      盡量使用一維數組代替多維數組

      2, Use Native Methods

      盡量使用系統提供的接口方法,因為系統提供的接口方法使用 C 編寫的,比自己用 Java 編寫的效率高

      3, Prefer Virtual Over Interface

      多使用接口的具體實現類。

      <1>,Map myMap1 = new HashMap();

      <2>,HashMap myMap2 = new HashMap();

      兩者比較結果:第一種是一向大家比較推崇的,因為他對以后的維護成本低,但是接口方法的調用比實現類方法的調用更耗時。

      4,   Prefer Static Over Virtual

      多使用靜態的方法和屬性

      5,   Avoid Internal Getters/Setters

      避免使用 C++ 或 C 形式的 (i=this.getCounter()) 這樣子的代碼

      6, Cache Field Lookups

      訪問對象的屬性比訪問本地變量花費時間多。

         Accessing object fields is much slower than accessing local variables.

        Instead of writing:

      for (int i = 0; i < this.mCount; i++)

            dumpItem(this.mItems[i]);

      You should write:

            int count = this.mCount;

            Item[] items = this.mItems;

           for (int i = 0; i < count; i++)

            dumpItems(items[i]);

      7,Declare Constants Final

      聲明一些 final 類型的常量

      static int intVal = 42;

      static String strVal = "Hello, world!";

      可以寫成如下:

      static final int intVal = 42;                                                                                           

      static final String strVal = "Hello, world!";

       

      8,Use Enhanced For Loop Syntax With Caution

      謹慎使用增強的 for 循環,因為它創建多余臨時變量。

      public class Foo {

          int mSplat;

          static Foo mArray[] = new Foo[27];

       

          public static void zero() {

              int sum = 0;

              for (int i = 0; i < mArray.length; i++) {

                  sum += mArray[i].mSplat;

              }

          }

       

          public static void one() {

              int sum = 0;

              Foo[] localArray = mArray;

              int len = localArray.length;

       

              for (int i = 0; i < len; i++) {

                  sum += localArray[i].mSplat;

              }

          }

       

          public static void two() {

              int sum = 0;

              for (Foo a: mArray) {

                  sum += a.mSplat;

              }

          }

      }


      zero() 返回兩次靜態字段、每次循環的時候都要請求數組的長度

      one() 將所有的屬性存放到本地,避免查找。

      two() 使用 jdk1.5 以上版本的增強 for 循環,這是有編譯器拷貝數組的引用和長度到本地這在主循環體會產生額外的本地裝載和存儲,這跟 one() 相比,比其運行時間長一小點,同時也比 one() 多 4byte 的存儲空間 u

      To summarize all that a bit more clearly: enhanced for loop syntax performs well with arrays, but be cautious when using it with Iterable objects since there is additional object creation.

       

      9,Avoid Enums

      避免使用枚舉。

      10,Use Package Scope with Inner Classes

      建議使用內部類

      public class Foo {

          private int mValue;

       

          public void run() {

              Inner in = new Inner();

              mValue = 27;

              in.stuff();

          }

       

          private void doStuff(int value) {

              System.out.println("Value is " + value);

          }

       

          private class Inner {

              void stuff() {

                  Foo.this.doStuff(Foo.this.mValue);

              }

          }

      }

      11,               Avoid Float

      盡量避免使用 float 類型

      12,               Some Sample Performance Numbers

      一些常用操作的占用時間相對比較:

      操作                                                                    時間

      Add a local variable                                                       1

      Add a member variable                                                           4

      Call String.length()                                                                     5

      Call empty static native method                                            5

      Call empty static method                                                        12

      Call empty virtual method                                                      12.5

      Call empty interface method                                                 15

      Call Iterator:next() on a HashMap                                      165

      Call put() on a HashMap                                                           600

      Inflate 1 View from XML                                                                   22,000

      Inflate 1 LinearLayout containing 1 TextView                   25,000

      Inflate 1 LinearLayout containing 6 View objects            100,000

      Inflate 1 LinearLayout containing 6 TextView objects     135,000

      Launch an empty activity                                                        3,000,000

       這些時間相對值,值得我們好好的權衡哦,很有幫助。
      聯系我們
      在線咨詢 QQ客服 0731-88362910
      地址:湖南省長沙市雷鋒大道1389號
      如有問題,可在線提交表單
        <form id="s3k3o"></form>

        <button id="s3k3o"></button>

        1. <rp id="s3k3o"><ruby id="s3k3o"><input id="s3k3o"></input></ruby></rp><th id="s3k3o"><track id="s3k3o"><video id="s3k3o"></video></track></th>
        2. <li id="s3k3o"><tr id="s3k3o"><u id="s3k3o"></u></tr></li>

        3. 国产欧美日韩综合在线成_狼友av永久网站免费观看武_久久久国产精品免费a片_亚洲av无码一区东京热