一.Support Annotation Library能做什麼
Support Annotation Library包含一系列的元注解,能夠幫助開發者在編譯期間發現可能存在的Bug,另外Android Studio本身就支援Annotation Library是以開發者無需再次添加依賴。
二.常用注解詳解
1.@NonNull與@Nullable注解
@NonNull:表示參數或者傳回值不能為空。
@Nullable:表示參數或者傳回值可以為空。
建立一個測試方法給參數加上@NonNull并且傳參為null,這時方法會報警告,并且用Android Lint進行檢查也會顯示警告。
image
當切換成@Nullable注解時警告則會消失
2.資源類型的注解
AnimatorRes:标記資源類型為android.R.animator類型
AnimRes:标記資源類型為android.R.anim類型
AnyRes:标記為任何一種資源類型
ArrayRes:标記資源類型為android.R.array類型
AttrRes:标記資源類型為android.R.attr類型
BoolRes:标記資源類型為布爾類型
ColorRes:标記資源類型是android.R.color類型
DrawableRes:标記資源類型為android.R.drawable類型
FractionRes:表示資源類型為fraction類型,這個比較少見,常見于Animation.xml中,比如50%p,表示占parent的50%。
IdRes:表示資源類型為android.R.id類型
IntegerRes:表示資源類型為android.R.integer類型
InterpolatorRes:表示資源類型為android.R.interpolator類型
LayoutRes:表示資源類型為android.R.layout類型
MenuRes:表示資源類型為androdi.R.menu類型
RawRes:表示資源類型為android.R.raw類型
StringRes:表示資源類型為android.R.string類型
StyleableRes:表示資源類型為android.R.styleable
StyleRes:表示資源類型為android.R.style類型
TransitionRes:表示資源類型為transition類型
XmlRes:表示資源類型為android.R.xml類型
資源型注解主要是防止因填寫錯誤的資源類型而産生的錯誤,舉個栗子:我們建立一個方法,在參數前加上@StringRes注解,然後調用的時候傳入color類型,這時Android Studio會報錯。
3.顔色類型的注解
顔色注解一共有兩個,資源類型使用@ColorRes,在RGB或ARGB值則使用@ColorInt
4.取值範圍注解
●@Size:可以限制數組集合或者字元串的大小,例如:
@Size(min=3):可以表示字元串的最小字元數為3
@Size(max=23):可以表示集合的元素個數最大為23
@Size(2):可以表示數組的元素個數為2
@Size(multiple=2):可以表示數組的大小是2的倍數
●@IntRange:參數類型是int或lang,用法如下
private void test7(@IntRange(from = 0,to = 255)int alpha){
}
●FloatRange:參數類型是float或者double,用法如下
private void test8(@FloatRange(from = 0,to = 1)float alpha){
}
5.權限注解
Android應用在使用某些系統功能時,需要在AndroidManifest.xml中聲名權限,否則在運作的時候可能會因為缺失對應的權限而發生錯誤,是以為了在編譯期間及時發現缺失的權限,我們可以使用@RequiresPermission。
聲明一個權限
@RequiresPermission(Manifest.permission.INTERNET)
private void test8(){
}
聲明最少一個權限
@RequiresPermission(anyOf = {Manifest.permission.INTERNET,Manifest.permission.WRITE_EXTERNAL_STORAGE})
private void test8(){
}
聲明多個權限
@RequiresPermission(allOf = {Manifest.permission.INTERNET,Manifest.permission.WRITE_EXTERNAL_STORAGE})
private void test8(){
}
對于Intent調用所需權限,可在Action字元串定義處添加注解
6.重寫函數注解(要求必須調用父類的方法)
建立一個類MyTest,并建立方法test然後加上@CallSuper注解
public class MyTest {
@CallSuper
protected void test(){
}
}
建立一個類MyTest2繼承MyTest,重寫test方法
public class MyTest2 extends MyTest {
@Override
protected void test() {
super.test();
}
}
如果将super.test()去掉則會報錯。
7.@VisibleForTesting
單元測試中可能要通路到一些不可見的類、函數或者變量,這時可以使用@VisibleForTesting注解來對其可見
8.@Keep
@Keep注解用來标記在Proguard混淆過程中不需要混淆的類或者方法。
@Keep
public class MyTest {
@CallSuper
protected void test(){
}
}