使用Android Support Annotations優化你的程式碼

michaelevans發表於2015-07-22

如果你還沒有聽說過Android Support Annotations 函式庫,你將錯過一個整潔的新軟體包,它有助於你捕獲程式中的bugs。該函式庫包含了許多的Java註解,用於幫助Android Studio檢測程式碼中可能存在的錯誤,並報告給開發者。註解型別有很多種,本文將只介紹其中幾種,請一定要自己閱讀文件以瞭解本文未介紹的其他註解型別。

@NONNULL / @NULLABLE

@NonNull和@Nullable可能是support annotations最基礎的也是最有用的註解之一了。使用這兩個註解修飾的函式引數或者函式,表示引數或者函式返回值是否可以為空,之後 Android Studio在程式碼可能出現不安全的情況下會給出智慧提示。

使用註解前後對比如下:

未使用註解:

使用Android Support Annotations優化你的程式碼

使用@NonNull註解:

使用Android Support Annotations優化你的程式碼

更進一步,我們可以使用@CheckResult註解來讓使用者知道該函式的返回值是需要使用的,沒有使用函式的返回值則Android Studio會給出警告提示:

使用Android Support Annotations優化你的程式碼

@STRINGRES / @DRAWABLERES等

你是否遇到過嘗試呼叫TextView的setText函式,結果出現如下異常:

android.content.res.Resources$NotFoundException: String resource ID #0x3039

當你給setText函式傳入一個整型值,TextView將它作為一個String資源id對待,並會進行查詢以便設定這個字串。如果存在一個可以標識整型值是非法ids的註解就好了,@StringRes正是用來實現這個功能的!

public void setText(@StringRes int id) {
  // Do something like getString(id), etc.
}

現在如果你試圖傳遞一個非字串的資源id給這個函式,你將得到如下提示:
使用Android Support Annotations優化你的程式碼

所有的資源型別都存在類似的註解,例如@DrawableRes, @ColorRes, @InterpolatorRes等等。

@KEEP

最近我發現一個新的support annotation註解@Keep。根據support annotations文件說明,這個註解還沒有被關聯到Gradle外掛中,被這個註解修飾的函式或者類,在程式碼混淆進行壓縮時會被保持住。

如果你曾經在使用Proguard時使用過

-keep class com.foo.bar { public static <methods> }

你會知道當嘗試把某個特定的函式或者類從優化操作中排除掉是多麼痛苦的事情。使用這個註解將會告訴Proguard不要對指定的函式或者類進行優化操作:

public class Example {
  @Keep
  public void doSomething() {
      // hopefully this method does something
  }
  ...
}

好訊息是,如果你已經使用了appcompat-v7,那麼support-annotations已經被包含在裡面了,可以立刻開始使用它了。

相關文章