色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

Android使用注解進行代碼檢查的實現方法

瀏覽:3日期:2022-09-22 13:38:26

Android Studio 內置了代碼檢查工具 Lint,可在菜單欄選擇 Analyze > Inspect Code 執行相應的代碼檢查,代碼檢查能夠根據推斷一些不合法的潛在問題,有助于在開發階段發現開發者因為主管原因導致的一下代碼問題,Android 官方提供了注解庫 support-annotations 來幫助開發者及早發現問題,下面是常用的一些注解,主要內容如下:

Nullness注解 資源注解 線程注解 值約束注解 權限注解 返回值注解 CallSuper注解 Typedef注解 可訪問性注解

Nullness注解

使用 Nullness 注解可以檢查給定變量、參數和返回值是否允許 null 值,具體如下:

@Nullable :表示可以為 null 的變量、參數或返回值, @NonNull :表示不可為 null 的變量、參數或返回值。

@NonNull@Overridepublic View onCreateView(String name, @NonNull Context context,@NonNull AttributeSet attrs) { //...}

資源注解

資源注解的使用可使得在源碼階段讓編輯器檢查書寫的不規范,也可在一定程度上優化代碼結構,下面是常見的資源注解如下:

@StringRes: 表示檢查是否包含R.string引用 @ColorRes: 表示檢查是否包含R.color引用 @ColorInt: 表示檢查是否包含表示顏色的整型 @DrawableRes: 表示檢查是否包含R.drawable引用 @DimenRes: 表示檢查是否包含R.dimen引用 @InterpolatorRes:表示檢查是否包含插值器引用

線程注解

線程注解可以檢查某個方法是否從某個特定類型的線程中調用,支持一下線程注解,具體如下:

@MainThread:表示主線程 @UiThread:表示 UI 線程 @WorkerThread:表示工作線程 @BinderThread:表示Binder線程 @AnyThread:表示任何一個線程

上述注解中 @MainThread 和 @UiThread 在大多時候表示的都是同一線程,如果應用中帶有多個試圖,UI 線程可與主線程不同,故可使用 @UIThread 標注與應用的視圖層次相關聯的方法,使用 @MainThread 僅標注與應用生命周期相關聯的方法。線程注解最常用的一個用途是 AsyncTask 使用中的方法替換,因為 AsyncTask 會執行后臺操作并將結果發布到 UI 線程。

值約束注解

使用值約束注解可驗證傳遞的參數的值的合法性,可以借此指定參數的設置范圍,可在一定程度上減少代碼在主觀程度上出現的錯誤,常見的值約束注解如下:

@IntRange:表示可以驗證整型參數是否在指定范圍內 @FloatRange:表示可以驗證浮點型參數是否在指定范圍內 @Size:表示可以驗證集合、數組、字符串參數是否在指定范圍內,可指定最大值、最小值以及確切值

上面的注解有一些可使用的參數,如 from、to、min 等,使用時具體在某個注解體重查看定義即可。

權限注解

權限注解 @RequiresPermission 可以驗證方法調用方的權限,即當使用了權限注解的方法時會檢查有沒有指定的權限,如果沒有則會提示要在 AndroidManifest.xml 文件中申明權限,如果是危險權限還有進行權限動態申請,使用方式參考如下:

/** * 單個權限檢查 * @param message */@RequiresPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)public void setMessage(String message) {}/** * 全部權限檢查 * @param message */@RequiresPermission(allOf = { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE})public void setMesage(String message) {}/** * 某個權限檢查 * @param message */@RequiresPermission(anyOf = { Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE})public void setMesage(String message) {}

返回值注解

返回值注解 @CheckResult 會檢查某個方法的返回值是否被使用,如果沒有被使用,則會根據 suggest 配置建議使用相同公民沒有返回值的另一個方法,如果返回值使用了,則和未加該注解的方法一樣,使用方式參考如下:

@CheckResult(suggest='#enforcePermission(String,int,int,String)')public int checkPermission(@NonNull String permission, int pid, int uid){ return 0;}

如果沒有使用返回值提示如下:

Android使用注解進行代碼檢查的實現方法

當返回值沒有被使用,則會建議使用相同功能沒有返回值的另一個方法,簡而言之,返回值注解 @CheckResult 能夠表示某個方法實際使用的時方法本身的處理還是方法最終的處理結果。

CallSuper注解

使用 @CallSuper 注解會驗證子類的重寫方法是否調用父類的實現,這樣約束的好處是可保證父類的實現不會修改,當然,如果不使用該注解,子類重寫父類的方法可以不調用弗父類的默認實現,具體參考如下:

/** * 父類 * @CallSuper注解的使用 */public class Test { //使用@CallSuper注解,子類重寫該方法時必須調用該方法 @CallSuper protected void onCreate(){ }}

下面是 Test 類的實現類:

/** * 子類 * @CallSuper注解的使用 */public class TestImpl extends Test{ @Override protected void onCreate() { super.onCreate(); /** * 如果不調用父類的方法,則會提示 * Some methods, such as View#onDetachedFromWindow, require that you also call the super implementation as part of your method. */ }}

Typedef注解

使用 @IntDef 和 @StringDef 注解 可以創建整型和字符串的枚舉注解來驗證其他代碼中使用的某些整型和字符串,可以保證代碼中的某些常量整型或常量字符串是某些具體定義的常量集,這兩個注解的位置只能是注解。

開發中總會使用到枚舉,枚舉在一定程度上可使得代碼結構更清晰,但枚舉的使用會增加內存的開銷,這里可以用 Typedef 注解的方式來代替枚舉,下面是 Tyoedef 注解的使用,參考如下:

/** * Typedef 注解的定義 */public class ActionType { public static final int ACTION_TYPE_0 = 0; public static final int ACTION_TYPE_1 = 1; public static final int ACTION_TYPE_2 = 2; @Retention(RetentionPolicy.SOURCE) @IntDef({ACTION_TYPE_0,ACTION_TYPE_1,ACTION_TYPE_2}) public @interface ActionTypeDef{ }}

下面是上述 Typedef 注解的使用方式,參考如下:

/** * Typedef注解的使用 * @param value */private void setValue(@ActionType.ActionTypeDef int value) { switch (value) { case ActionType.ACTION_TYPE_0: break; case ActionType.ACTION_TYPE_1: break; case ActionType.ACTION_TYPE_2: break;// case 100://不能使用未定義的整型// break; }}

可見 Typedef 注解約束了使用到的某些整型,當然還可以是字符串,這樣也能達到枚舉的作用。

可訪問性注解

可訪問性注解是 @VisibleForTesting 和 @Keep 可以表示方法、字段、類的可訪問性。具體如下:

@VisibleForTesting:表示注解的某個代碼塊的可見性高于能夠測試時需要的水平 @Keep:表示被注解的代碼塊將不會被混淆。

最常用的可能就是資源注解,如 @StringRes、@ColorRes、@ColorInt等,還有Typeof 注解,該注解可以在替換枚舉在 Android 開發中帶來的性能影響,如果平時留意這些注解在 Android 源碼中也經常使用,所以可在開發過程中嘗試去使用這些注解以進行必要的代碼檢查。

總結

到此這篇關于Android使用注解進行代碼檢查的實現方法的文章就介紹到這了,更多相關Android 注解代碼檢查內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
主站蜘蛛池模板: chinese情侣真实自拍 | 亚洲欧美日韩国产 | 成人精品一区久久久久 | 中文字幕99在线精品视频免费看 | 成人网18免费软件 | 日韩国产免费一区二区三区 | 亚洲图片国产日韩欧美 | 久久黄色视屏 | 亚洲第一免费播放区 | 欧美午夜性春猛交 | 亚洲成人免费观看 | 久久综合九色综合欧洲色 | 久久精品免费视频观看 | 欧美日韩在线播放一区二区三区 | 一本一本久久a久久精品综合麻豆 | 欧美成人午夜视频免看 | 亚洲女视频 | 日韩精品亚洲一级在线观看 | 久久成 | 日韩在线精品视频 | 在线视频观看一区 | 精品久久一区 | 日韩毛片免费视频一级特黄 | 精品久久一区二区三区 | 日本美女福利视频 | 久热国产在线视频 | 成年人免费看视频 | 久草草视频在线观看免费高清 | 欧美精品1| japonensis国产福利 | 亚色网站| 国产网站精品 | 久久色精品 | 国产精品videossex另类 | 国产成人精品一区二区免费视频 | 久久久久亚洲 | 美女一级毛片毛片在线播放 | 中文字幕在线永久 | 男人女人真曰批视频播放 | 久久久久久久国产视频 | 欧美另类视频在线观看 |