摘要:表示參數變量或者函數返回值應該是一個類型的資源,而不是顏色值。舉例子,閱讀源代碼中的方法值范圍注釋當函數參數的取值在一定范圍時,可以使用注解來防止調用者傳入錯誤的參數,主要注解有三種。使用這個注釋將警告信息去掉。
目錄介紹
1.Annotation庫的簡單介紹
2.@Nullable和@NonNull
3.資源類型注釋
4.類型定義注釋
5.線程注釋
6.RGB顏色紙注釋
7.值范圍注釋
8.權限注釋
9.重寫函數注釋
10.返回值注釋
11.@Keep注釋
12.@SuppressWarnings注解
13.其他
1.Annotation庫的簡單介紹包含一系列有用元注釋,幫助開發者在編譯期間發現可能存在的bug
是屬于Support Lib其中之一,獨立jar包
通過注釋來完善自身代碼質量
官方文檔:
AndroidAnnotations是一個能讓你進行快速開發的開源框架,它讓你關注真正重要的地方,它可以簡化你的代碼,并且有利于你后期的維護
庫的特點
依賴注入(Dependency injection):支持view, extras, system service, resource等等
簡單的線程模型(Simplified threading model):進行方法注解以讓該方法在UI線程或后臺線程進行執行
事件綁定(Event binding):進行方法注解以讓方法執行view的時間而不用再添加一些監聽
REST client:創建一個接口,AndroidAnnotations用來實現
沒有神秘感(No magic):AndroidAnnotations在編譯時會產生一個子類,你可以查看子類中的代碼來知道它是如何工作的.
編譯檢測:提供的多種注解,用于檢測代碼編譯時可能存在的異常,并給開發者相關提示,提高代碼質量
AndroidAnnotations來實現這些美好的功能,只需要不到150kb的大小
相關文檔給出說明
androidannotations.org
這篇文檔給出了案例,很好地說明了注釋前后代碼的區別
2.@Nullable 和 @NonNull
說明:
檢測參數或者方法返回值是否可以為null,這是該框架中最常用也是最基礎的注解之一了,使用了這兩個注解,在Android Studio中,如果出現代碼不安全的情況下,會給出智能提示
@Nullable作用于函數參數或者返回值,標記參數或者返回值可以為空
@NonNull作用于函數參數或者返回值,標記參數或者返回值不可以為空
@NonNull使用舉例【千萬別忽視黃色警告-----這個淡黃色警告實際開發中很容易忽視】
未加注釋:
添加注釋:
結論:可以看到加上的@NonNull注解后,AndroidStudio會自動檢測不安全的代碼并給出友好提示,提示開發者進行修改
@Nullable 使用舉例
結論:將@Nullable作用在方法上,這樣方法的返回值是允許為null的,但是可能會導致某些情況下的crash;
3.資源類型注釋
在我們平時開發中我們肯定會經常用到引用一些資源,比如圖片資源及字符串資源或者顏色值資源,因為這些資源的類型都是int值,所以有時候我們在給TextView設置字符串資源時也有可能引用了圖片資源ID,就會導致有問題,比如會出現以下異常:
android.content.res.Resources$NotFoundException: String resource ID #0x3039
資源通常是以整型值表示的,保存在R.Java文章中。如果傳入資源值不對,那么編譯器不會報錯,但是運行期會報錯。而注解可以避免這個問題。
資源類型注解主要都有哪些?
@StringRes : 表示參數、變量或者函數返回值應該是一個字符串類型的資源
@ColorInt : 表示參數、變量或者函數返回值應該是一個顏色值而不是顏色資源引用,例如應該是一個 AARRGGBB 的整數值。
@ColorRes : 表示參數、變量或者函數返回值應該是一個 color 類型的資源,而不是顏色值。注意和 ColorInt 區別
@AnimRes : 表示參數、變量或者函數返回值應該是一個 Anim 類型的資源
@DrawableRes : 表示參數、變量或者函數返回值應該是一個 drawable 類型的資源
@DimenRes : 表示參數、變量或者函數返回值應該是一個 dimension 類型的資源
舉例子: 這里定義了一個方法,方法中只接受@StringRes注解的int引用
沒有添加注釋前
添加注釋后
結論:添加注釋可以在編譯器就找到錯誤
5.線程注釋線程注解主要是用于檢測一個函數是否在指定類型的線程中執行
類型
@UiThread:標記運行在UI線程,一個UI線程是Activity運行所在的主窗口,對于一個應用而言,可能存在多個UI線程。每個UI線程對應不同的主窗口。
@MainThread:標記運行在主線程,一個應用只有一個主線程,主線程也是@UiThread線程。通常情況下,我們使用@MainThread來注解生命周期相關函數,使用@UiThread來注解視圖相關函數,一般情況下@MianThread和@UiThraed是可以互換的。
@WorkerThread:標記運行在后臺運行線程。
@BinderThread:標記運行在Binder線程
舉例子
public void threadtest(){ new Thread(new TimerTask() { @Override public void run() { setTest(); } }).start(); } @UiThread public void setTest(){ test.setText("測試"); } 那么上面會報錯。提示:不做線程切換,只起到提示作用!6.RGB顏色紙注釋
在資源類型注解中我們使用@ColorRes來標記參數類型需要傳入顏色類型的id,而使用@ColorInt注解是標記參數類型需要傳入RGB或者ARGB顏色值的整型值。
舉例子,閱讀TextView源代碼中的setTextColor方法
7.值范圍注釋當函數參數的取值在一定范圍時,可以使用注解來防止調用者傳入錯誤的參數,主要注解有三種。
第一種
@Size:對于類似數組、集合和字符串之類的參數,我們可以使用@Size注解來表示這些參數的大小。 用法: @Size(min=1)//可以表示集合不可以為空 @Size(max=23)//可以表示字符串最大字符個數為23 @Size(2)//表示數組元素個數為2個 @Size(multiple=2)//可以表示數組大小是2的倍數
@IntRange:參數類型是int或者long,用法如下
public void setInt(@intRange(from=0,to=255)){...}
@FloatRange:參數類型是float或者double,用法如下
public void setFloat(@FloatRange(from=0.0,to=1.0)){...}
舉個例子
@FloatRange 用法
@Size用法
數組只能有2個元素: @Size(2)
8.權限注釋Android應用在使用某些系統功能時,需要在AndroidManifest,xml中聲明權限,否則在運行時就會提示缺失對應的權限,為了在編譯時及時發現權限的缺失,我們可以使用@RequiresPermission注解。
如果需要一個權限則加注解。
@RequiresPermission(Manifest.permission.SET_WALLPAPER)
如果需要一個集合至少一個權限,那么就加注解。
@RequiresPermission(anyOf = {Manifest.permission.SET_WALLPAPER,Manifest.permission.CAMERA})
如果同時需要多個權限,那么就加注解。
@RequiresPermission(allOf = {Manifest.permission.SET_WALLPAPER,Manifest.permission.CAMERA})
對于Intent調用所需權限的ACTION字符串定義處添加注解。
@RequiresPermission(android.Manifest.permission.BLUETOOTH) String ACTION_REQUEST_DISCOVERRAVLE = "android.bluetooth.adapter.REQUEST_DISCOVERRAVLE";
對于ContentProvider所需權限,可能有讀和寫兩個操作。對應不同的權限。
@RequiresPermission.Read(@RequestPermission(READ_HISTORY_BOOLMARKS)) @RequiresPermission.Write(@RequestPermission(WRITE_HISTORY_BOOLMARKS)) public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks);9.重寫函數注釋
如果API允許重寫某個函數,但是要求在重寫該函數時需要調用super父類的函數。
可以加注解@CallSuper來提示開發者。若是重寫不調用super就會報錯
舉例子
10.返回值注釋該注解是為了檢測方法返回值是否是需要使用的,如果沒有被使用,則AndroidStudio會給出警告提示
@CheckResult使用案例
添加注釋:
11.@Keep注釋
@keep是用來標記在Proguard混淆過程中不需要混淆的類或者方法。在混淆時一些不需要混淆的會使用
-keep class com.foo.bar{public static}
有了@Keep之后,就可以在編碼時標注出一些不需要混淆的類或者方法
12.@SuppressWarnings注解這個注解在源碼里是隨處可見,其實它的用法很簡單,就是對一些警告信息的過濾。
源代碼
這個注解是可以使用在屬性、方法、構造方法、變量等等。那么它的參數就是一個字符串數組。可以單個,可以多個。
示例
告訴編譯器忽略 unchecked 警告信息,如使用List,ArrayList等未進行參數化產生的警告信息。 * @SuppressWarnings("serial") 如果編譯器出現這樣的警告信息:The serializable class WmailCalendar does not declare a static final serialVersionUID field of type long 使用這個注釋將警告信息去掉。 * @SuppressWarnings("deprecation") 如果使用了使用@Deprecated注釋的方法,編譯器將出現警告信息。 使用這個注釋將警告信息去掉。 * @SuppressWarnings("unchecked", "deprecation") 告訴編譯器同時忽略unchecked和deprecation的警告信息。 * @SuppressWarnings(value={"unchecked", "deprecation"}) 等同于@SuppressWarnings("unchecked", "deprecation") ```13.其他
@EActivity、@ViewById、@Click
這三個注解應該是對我們的代碼簡潔性最有幫助的
@EActivity : 后面需要跟上一個layout id,來標示該Activity所加載的xml布局,這樣原來的onCreate()方法就不用寫了;
@ViewById : 與findViewById作用一致,而且@ViewById后面可以不寫控件id,前提是控件變量名要與控件id一致
@Click : 也就是控件的點擊事件,而且如果控件ID與方法名一致,后面就不用寫控件ID了. 該注解可以多帶帶寫,也可以對多個Button合并寫
代碼案例
//這里加注解就可以不寫onCreate方法 @EActivity(R.layout.activity_test_annotation) public class TestAnnotation extends AppCompatActivity { @ViewById(R.id.tv_name)//如果變量名和控件ID一致,后面就不用寫id TextView tv_name; @Click(R.id.showName)//如果控件ID與方法名一致,后面就不用寫id public void showName(){ Toast.makeText(this,tv_name.getText(),Toast.LENGTH_SHORT).show(); } }關于其他內容介紹 01.關于博客匯總鏈接
1.技術博客匯總
2.開源項目匯總
3.生活博客匯總
4.喜馬拉雅音頻匯總
5.其他匯總
02.關于我的博客我的個人站點:www.yczbj.org,www.ycbjie.cn
github:https://github.com/yangchong211
知乎:https://www.zhihu.com/people/...
簡書:http://www.jianshu.com/u/b7b2...
csdn:http://my.csdn.net/m0_37700275
喜馬拉雅聽書:http://www.ximalaya.com/zhubo...
開源中國:https://my.oschina.net/zbj161...
泡在網上的日子:http://www.jcodecraeer.com/me...
郵箱:yangchong211@163.com
阿里云博客:https://yq.aliyun.com/users/a... 239.headeruserinfo.3.dT4bcV
segmentfault頭條:https://segmentfault.com/u/xi...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77224.html
摘要:楊充一定時間內該點擊事件只能執行一次用來修飾這是一個什么類型的注解。楊充自定義編譯器獲取遍歷,并生成代碼配置文件文件配置的作用是向系統注冊自定義注解處理器,執行編譯時使用進行處理。 目錄介紹 01.創建項目步驟 1.1 項目搭建 1.2 項目功能 02.自定義注解 03.創建Processor 04.compiler配置文件 05.編譯jar 06.如何使用 07.編譯生成代...
摘要:使用實現功能運行期注解案例使用簡單的注解,便可以設置布局,等效于使用實現路由綜合型案例比較全面的介紹從零起步,一步一步封裝簡易的路由開源庫。申明注解用的就是。返回值表示這個注解里可以存放什么類型值。 YCApt關于apt方案實踐與總結 目錄介紹 00.注解系列博客匯總 01.什么是apt 02.annotationProcessor和apt區別 03.項目目錄結構 04.該案例作用 ...
摘要:要使用注解來保護資源需要引入下面的依賴引入之后我們需要配置切面讓其生效,因為是通過切面來實現的,我這邊以中使用進行配置示列然后在需要限制的方法上加注解即可錯誤發生在表示資源名,必填項處理的方法名,可選項。 在前面我們對Sentinel做了一個詳細的介紹,可以手動的通過Sentinel提供的SphU類來保護資源。這種做法不好的地方在于每個需要限制的地方都得寫代碼,從 0.1.1 版本開始...
摘要:如感興趣,可移步手寫之基于動態創建對象手寫之基于注解動態創建對象今天將詳細介紹如何手寫依賴注入,在運行過程中如何動態地為對象的屬性賦值。完成后在中會有相關的包出現進行注入前需要創建工廠,在運行時從工廠中取出對象為屬性賦值。 前兩篇文章介紹了關于手寫Spring IOC控制反轉,由Spring工廠在運行過程中動態地創建對象的兩種方式。如感興趣,可移步: 手寫Spring之IOC基于xml...
閱讀 2335·2021-11-15 11:38
閱讀 3544·2021-09-22 15:16
閱讀 1187·2021-09-10 11:11
閱讀 3156·2021-09-10 10:51
閱讀 2921·2019-08-30 15:56
閱讀 2774·2019-08-30 15:44
閱讀 3185·2019-08-28 18:28
閱讀 3525·2019-08-26 13:36