android 中的注解

Android 中的注解在项目中挺实用的,很多时候可以替换枚举型的数据。
更详细的内容可以去 官方文档

这里举个例子,登陆的角色分另种,一种是店长,另一种是普通的收银员。在整个应用中,需要根据用户类型做出相应的反应时,计较方便了,而不要用到枚举类型。

/**
 *  用户类型
 */
public class UserTypes {

    @IntDef({SHOP_MANAGER, NORMAL_CASHIER})
    @Retention(RetentionPolicy.SOURCE)
    public @interface UserType{}

    /**
     *  店长
     */
    public static final int SHOP_MANAGER = 1;

    /**
     *  普通收银员
     */
    public static final int NORMAL_CASHIER = 2;
}

下面是对官方关于注解的一个笔记。

1. Nullness Annotation

@Nullable, @Nonull

Nullability analysis:
. Calling methods that can return null.
. Methods, such as fields, local variable and parameters, that can null.
. Variables, such as fields, local variable and parameters, that cannot hold a null value.

可以利用 Android Studio 进行检查:
Run a null ability analysis: Analyz –> Infer Nullity

2. Resource annotations

这个在方法中可以限制传入的参数类型,防止出错。

@StringRes @DrawableRes @DimenRes @InterpolatorRes

@AnyRes
indicates that the annotated parameter can be any type of R resource.

@ColorRes
specify that a parameter should be a color resource, a color integer.

@ColorInt
to indicate that parameter must be a color integer.

扫描二维码关注公众号,回复: 9346629 查看本文章

例子:

     /**
     *  获取 Drawable 资源
     * @param context
     * @param dra
     * @return
     */
    public static Drawable getResourceDrawable(Context context, 
                            @DrawableRes int dra){
        Drawable drawable = context.getResources().getDrawable(dra);
        return drawable;
    }

    /**
     *  获取 Color 资源
     * @param context
     * @param color
     * @return
     */
    public static int getResourceColor(Context context, @ColorRes int color){
        Resources resources = context.getResources();
        return resources.getColor(color);
    }

3. Thread annotations

@MainThread @UiThread @WarkerThread @BinderThread @AnyThread

@UiThread
annotate methods associated with an app’s view hierarchy.

@MainThread
annotate only methods associated with an app’s lifecycle.

4. Value constraint annotations. 值约束注解

@IntRange @FloatRange @Size
annotations to validate the values of passed parameters.

例子:
public void setAlpha(@IntRange(from= 0, to=255) int apha);

public void setAlpha(@FloatRange(from = 0.0, to = 1.0) float alpha);

@Size
checks the size of a collection or array, the length of a string.
. Minimum size(such as @Size(min = 2));
. Maximum size (such as @Size(max = 2));
. Exact size (such as @Size(2);
. A number of which the size must be a multiple(@Size(multipl = 2));

5. Permission annotations

@RequiresPermission
to validate the permissions of the caller of a method.

any of 和 all of 结合例子看
any of: 只需要其中一个权限即可
to check for a single permission from list the valid permission.

all of : 所有的权限都要有
to check for a set of permissions.

例子:

    @RequiresPermission(Manifest.permission.SET_WALLPAPER)
    public abstract void setWallpaper(Bitmap bitmap) throws IOException;


    @RequiresPermission(allOf = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE})
    public static final void copyFile(String dest, String source);

6 Typedef annotations

类型定义注解,这类注解最常用在项目中,可以替换枚举类型,文章开头的例子就属于这种类型。
@IntDef @StringDef

7 Keep annotations

在混淆的时候比较有用,防止被混淆掉。
@keep
Ensures that an annotated class or method is not removed when the code is minified at build time.

发布了58 篇原创文章 · 获赞 20 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/yxhuang2008/article/details/71330637