Android 經常使用註解

IntDef 和 StringDef 註解

主要使用 IntDefStringDef 註解替代枚舉。android

例如:git

public static final int RED = 0x1;
public static final int GREEN = 0x2;
public static final int BLUE = 0x3;

@IntDef({RED, GREEN,BLUE})
@Retention(RetentionPolicy.SOURCE)
public @interface BgColor{}

private int color;

public void setColor(@BgColor int color) {
    this.color = color;
}

@BgColor
public int getColor() {
    return color;
}
複製代碼

Nullness 註解

註解標識 描述
@Nullable 標記參數或者返回值能夠爲空
@NonNull 標記參數或者返回值不能夠爲空

注意:在使用的過程當中發如今最新版本的AndroidStudio中不添加@Nullable和@NonNull,編譯器也一樣會提示響應的警告,因此這個註解能夠忽略使用。github

資源類型註解

註解標識 描述
@AnimatorRes 標記整形值爲android.R.animator類型(屬性動畫相關)
@AnimRes 標記整形值爲android.R.anim類型(補間動畫相關)
@XmlRes 標記整形值爲android.R.xml類型
@AnyRes 任何資源類型
@ArrayRes 數組資源類型
@AttrRes 屬性資源類型
@BoolRes bool類型資源類型
@ColorRes 顏色資源類型
@DimenRes 長度資源類型
@DrawableRes 圖片資源類型
@IdRes 資源id
@InterpolatorRes 動畫插值器
@LayoutRes layout資源
@MenuRes menu資源
@RawRes raw資源
@StringRes 字符串資源
@StyleRes style資源
@StyleableRes Styleable資源類型
@TransitionRes transition資源類型

Threading 註解

註解標識 描述
@UiThread UI線程 (對一個應用而言可能存在多個UI線程,每一個UI線程對應不一樣Activity的主窗口)
@MainThread 主線程 (一個應用只有一個主線程, 固然主線程也是UI線程)
@WorkerThread 子線程
@BinderThread 綁定線程

Value Constraints 註解

註解標識 描述
@Size 定義長度大小,可選擇最小和最大長度使用 (min = 1, max = 100),主要用於對於相似數組、集合和字符串之類的參數
@IntRange IntRange是用來指定int類型範圍的註解
@FloatRange FloatRange和IntRange用法同樣,不過是指定的是float類型的數據對象

@CallSuper 註解

若是API容許調用者重寫某個函數,但同時要求重寫的函數須要調用被重寫的函數, 那麼可以使用 @CallSuper 註解。數組

@CallSuper 註解主要是用來強調在覆蓋父類方法時,須要實現父類的方法,及時調用對應的super.xxx方法,當用 @CallSuper 修飾了該方法,若是子類覆蓋後的方法沒有實現super方法會拋出異常。bash

@CheckResult 註解

若是函數須要調用者對返回值作某些處理,那麼可使用 @CheckResult 註解來提示開發者。咱們不必對每一個非空返回值的函數都添加這個註解,該註解的主要目的是讓調用者在使用API時,不至於懷疑該函數是否會產生反作用。ide

假設你定義了一個方法返回一個值,你指望調用者用這個值作些事情,那麼你可使用 @CheckResult 註解標註這個方法,強制用戶定義一個相應的返回值,使用它!函數

此外還能夠指定警告信息post

//若是調用者沒有檢查函數的返回值,Android Studio將會給出警告
//警告信息中包含suggest指定的內容
@CheckResult(suggest="#enforcePermission(String,int,int,String)")
@PackageManager.PermissionResult
public abstract int checkPermission(@NonNull String permission, int pid, int uid);
複製代碼

權限註解

Android應用在使用某些系統功能時,須要在 AndroidManifest.xml 中聲明權限,不然在運行時會提示缺失對應的權限。爲了在編譯期及時發現缺失的權限,咱們可使用 @RequiresPermission 註解。單元測試

//代表調用該函數須要聲明一個權限
@RequiresPermission(Manifest.permission.CHANGE_NETWORK_STATE)
public void setDataEnable() {
    ..........
}

//代表調用該函數須要聲明集合中至少一個權限
@RequiresPermission(anyOf = {
        Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.INTERNET})
public void setDataEnable() {
    .........
}

//代表調用該函數須要聲明集合中全部的權限
@RequiresPermission(allOf = {
        Manifest.permission.CHANGE_NETWORK_STATE, Manifest.permission.INTERNET})
public void setDataEnable() {
    .........
}
複製代碼

除了修飾函數外,該註解還能夠修飾Intent對應的ACTION字段或ContentProvider對應的Uri,例如:測試

@RequiresPermission(Manifest.permission.ACCESS_WIFI_STATE)
public static final String ACTION_TEST = "com.zj.test.Wifi";

//對於ContentProvider可能須要讀和寫這兩個操做,對應不一樣的權限聲明
@RequiresPermission.Read(@RequiresPermission("read_permission"))
@RequiresPermission.Write(@RequiresPermission("write_permission"))
public static final Uri TEST_URI = Uri.parse("content://test/info");
複製代碼

測試可見註解

單元測試中,可能須要訪問到一些不可見的類、函數或變量,這時可使用@VisibleForTesting註解來使其對測試可見。

Keep註解

@Keep 註解用來標記在Proguard混淆過程當中不須要混淆的類或者方法,例如:

public class Test {
    @Keep
    public void test() {
        ..........
    }
}
複製代碼





About Me

相關文章
相關標籤/搜索