Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發環境 >> Android Studio(七):通過注解提升代碼檢測

Android Studio(七):通過注解提升代碼檢測

編輯:Android開發環境

  使用像Lint這樣的代碼檢測工具可以幫助你發現問題和提升代碼,但是代碼檢測在有些地方很難應用。例如,Android的資源ID,使用一個int類型來表示字符、圖像、顏色或者其他資源類型所以代碼檢測工具不能分辨這是一個字符串資源,還是一個顏色資源。這種情況下,即使你使用代碼檢測工具,你的app可能會渲染失敗或者不能運行。

  注解允許你為Lint這樣的代碼檢測工具提供提示來幫助Lint檢測更深層次問題。當你使用代碼檢測工具的時候,注解可以幫助你檢測問題,比如空指針異常和資源類型沖突。

  Android支持多種注解,允許你在方法,參數和返回值中使用,比如:

  1、@Nullable

  可以為空

  2、@NonNull

  不可以為空

  3、@StringRes

  提示Lint為String資源

  4、@DrawableRes

  提示Lint為Drawable資源

  5、@ColorRes

  提示Lint為Color資源

  6、@InterpolatorRes

  提示為Interpolator資源

  7、@AnyRes

  提示為任何類型的資源

  8、@UiThread

  在主線程中調用

  這裡僅僅列出部分的注解。

  添加基本注解

  為了添加注解到你的代碼中,首先需要添加一個依賴:

  1、 選擇File > Project Structure

  2、 在Project Structure中選擇相應的模塊,點擊Dependencies標簽

  3、 單擊+導入一個Library dependency

  4、 在Choose Library Dependency對話框,選擇support-annotations,點擊OK

  在build.gradle文件中自動更新了support-annotations依賴。

  你也可以手動添加:

  dependencies {

  compile ‘com.android.support:support-annotations:23.3.0’

  }

  如果你在一個library中添加注解,並打包成AAR,注解將會以XML格式保存在annotations.zip文件中。

  添加空的注解

  添加@Nullable和@NonNull注解來檢測給定的變量,參數或者返回值是否為空。比如,一個值為null的本地變量通過參數傳遞給添加了@NonNull注解的參數,構建代碼回生成一個警告。如下:

Java代碼
  1. import android.support.annotation.NonNull;   
  2. …   
  3. @NonNull   
  4. @Override   
  5. public View onCreateView(String name, @NonNull Context context,   
  6. @NonNull AttributeSet attrs) {   
  7. …   
  8. }   
  9. …  

  判空分析

  Android Studio運行一個判空分析,並且自動添加相關的注解到你的代碼中。可以檢測:

  1、 調用方法是否返回null

  2、 方法不能返回null

  3、 變量不能為null

  4、 變量不能保持一個null值

  添加資源注解

  比如,添加@StringRes注解可以檢測一個資源參數是否包含R.string。在代碼檢測的時候,如果R.string沒有通過參數進行傳遞,則生成一個警告。

  如下:

Java代碼
  1. import android.support.annotation.StringRes;   
  2. public abstract void setTitle(@StringRes int resId);  

  添加線程注解

  線程注解檢測一個方法事是否運行在特定的線程,支持如下線程注解:

  1、@UiThread

  2、@MainThread

  3、@WorkerThread

  4、@BinderThread

  注意:@UiThread和@MainThread是可以互換的

  添加值約束注解

  使用@IntRange、@FloatRange和@Size注解來驗證傳遞參數的值。

  @IntRange注解驗證參數值是否在特定的范圍內,如下示例確保alpha參數范圍在0到255之間。

Java代碼
  1. public void setAlpha(@IntRange(from=0,to=255) int alpha) { … }   

  @FloatRange注解檢測參數值是否在一定的浮點范圍內。下面這個示例確保alpha參數為0.0到1.0的參數:

Java代碼
  1. public void setAlpha(@FloatRange(from=0.0, to=1.0) float alpha) {…}  

  @Size注解檢測集合、數組或字符串的大小,比如,使用@Size(min=1)注解來判斷集合是否為空,使用@Size(2)注解來驗證一個數組是否包含兩個值。以下示例確保location數組包含至少一個元素:

Java代碼
  1. int[] location = new int[3];   
  2. button.getLocationOnScreen(@Size(min=1) location);  

  添加權限注解

  使用@RequiresPermission注解來驗證調用方法調用時的權限。為了檢查是否用到很多權限中的某個權限,使用anyOf屬性,檢測是否用到多個權限,使用allOf屬性。如下:

Java代碼
  1. @RequiresPermission(Manifest.permission.SET_WALLPAPER)   
  2. public abstract void setWallpaper(Bitmap bitmap) throws IOException;  

  另外一個示例:

Java代碼
  1. @RequiresPermission(allOf = {   
  2. Manifest.permission.READ_EXTERNAL_STORAGE,   
  3. Manifest.permission.WRITE_EXTERNAL_STORAGE})   
  4. public static final void copyFile(String dest, String source) {   
  5. …   
  6. }  

  添加結果檢測注解

  使用@CheckResults注解來驗證一個方法的結果或者返回值是否被使用。如下:

Java代碼
  1. @CheckResult(suggest=”#enforcePermission(String,int,int,String)”)   
  2. public abstract int checkPermission(@NonNull String permission, int pid, int uid);  

  添加調用super 注解

  使用@CallSuper注解來驗證重寫方法是否調用了父類的方法。

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