1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/AWeiLoveAndroid-The-pit-of-the-Android-Studio

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Android注解库的使用.md 7.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 23:49 68fea2d

Поток аннотаций

Поток аннотации может проверять, был ли метод вызван из определённого типа потока. Поддерживаются следующие аннотации потока:

  • @MainThread: указывает, что помеченный метод должен вызываться только в основном потоке. Если помечен класс, все методы в классе должны вызываться в основном потоке. Пример: (обычно основным потоком приложения является поток пользовательского интерфейса (UI). Однако в особых случаях основной поток приложения может не быть его потоком UI).

    @MainThread public void deliverResult(D data) { ... }

  • @UiThread: указывает, что помеченный метод или конструктор должен вызываться только в потоке пользовательского интерфейса. Если помечен класс, все методы класса должны вызываться в потоке пользовательского интерфейса. Пример:

    @UiThread public abstract void setText(@NonNull String text) {...}

  • @WorkerThread: указывает, что помеченный метод должен вызываться только рабочим потоком. Если помечен класс, все методы класса должны вызываться рабочим потоком. Пример:

    @WorkerThread protected abstract FilterResults performFiltering(CharSequence constraint);

  • @BinderThread: указывает, что помеченный метод должен вызываться только связывающим потоком. Если помечен класс, все методы класса должны вызываться связывающим потоком. Пример:

    @BinderThread public BeamShareData createBeamShareData() { ... }

  • @AnyThread: указывает на то, что помеченный метод можно вызывать из любого потока. Если помечен класс, все методы класса могут вызываться из любого потока. Пример:

    @AnyThread public void deliverResult(D data) { ... }

Инструменты сборки рассматривают аннотации @MainThread и @UiThread как взаимозаменяемые, поэтому мы можем вызывать метод @UiThread из метода @MainThread, и наоборот. Однако, если в системе есть несколько попыток, связанных с разными потоками, поток UI может отличаться от основного потока. Поэтому мы должны использовать аннотацию @UiThread для методов, связанных со слоем представления приложения, а аннотацию @MainThread — только для методов жизненного цикла приложения.

Ресурсная аннотация

В Android почти все ресурсы имеют соответствующий идентификатор, который мы можем использовать напрямую при использовании, например:

textView.setText(getResources().getText(R.string.app_name));

Однако это может привести к ошибкам, если мы передадим случайное значение, например 0, тогда соответствующий ресурс не будет найден. Чтобы избежать ошибок, вызванных нашей невнимательностью, мы можем использовать ресурсные аннотации, такие как:

public int getText(@StringRes int id){ }

При вызове этого метода, если переданный параметр не является идентификатором ресурса String, компилятор выдаст ошибку.

Помимо аннотации @StringRes, существуют и другие:

@IntegerRes: тип ресурса R.integer. @AnimatorRes: тип ресурса R.animator. @AnimRes: тип ресурса R.anim. @ArrayRes: тип ресурса R.array. @AttrRes: тип ресурса R.attr. @BoolRes: тип ресурса R.bool. @ColorRes: тип ресурса R.color. @DimenRes: тип ресурса R.dimen. @DrawableRes: тип ресурса R.drawable. @FractionRes: тип ресурса R.fraction (процент). @IdRes: тип ресурса R.id. @InterpolatorRes: тип ресурса R.interpolator (интерполятор). @LayoutRes: тип ресурса R.layout. @MenuRes: тип ресурса R.menu. @PluralsRes: тип ресурса R.plurals (множественное число). @RawRes: тип ресурса R.raw. @StyleableRes: тип ресурса R.styleable. @StyleRes: тип ресурса R.style. @TransitionRes: тип ресурса R.transition. @XmlRes: тип ресурса R.xml. @AnyRes: неизвестный ресурс (неизвестный тип ресурса. Может быть R.drawable или R.string).

@ColorInt

Аннотация @ColorInt используется для ограничения значения цвета (ARGB: 0xAARRGGBB):

public void setColor(@ColorInt int color) { }

Если вы используете идентификатор ресурса напрямую, вы получите сообщение об ошибке, например:

setColor(R.color.colorAccent)// ошибка

Правильное использование:

setColor(0xFFFF00FF);

Если вам нужно использовать идентификатор ресурса, вы можете использовать метод ContextCompat.getColor():

setColor(ContextCompat.getColor(context, R.color.colorAccent));

@CallSuper

Эта аннотация используется для украшения метода и означает, что при переопределении этого метода необходимо вызвать метод super. Например, метод onCreate():

@CallSuper protected void onCreate(Bundle savedInstanceState) { }

Когда вы переопределяете метод onCreate(), вы должны вызвать метод super:

super.onCreate(savedInstanceState);

иначе вы получите ошибку.

@VisibleForTesting & @Keep

Аннотации @VisibleForTesting и @Keep используются для обозначения доступности методов, классов или полей.

@VisibleForTesting: эта аннотация служит только комментарием, информирующим других разработчиков о том, почему код имеет такой уровень видимости (для удобства тестирования). Поэтому она часто используется для декорирования public или protected, использование её для декорирования private не вызовет ошибки, но будет бессмысленным.

@Keep: помеченный код не будет запутан при обфускации.

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/AWeiLoveAndroid-The-pit-of-the-Android-Studio.git
git@gitlife.ru:oschina-mirror/AWeiLoveAndroid-The-pit-of-the-Android-Studio.git
oschina-mirror
AWeiLoveAndroid-The-pit-of-the-Android-Studio
AWeiLoveAndroid-The-pit-of-the-Android-Studio
master