注解机制 androidannotations 让编程更随性,更轻松(二)

Pytorch学习笔记(III)——提取特征 目录一、引言二、具体步骤1、参数模型2、网络结构3、参数载入4、特征提取器5、读取图片三、完整代码 一、引言   深度学习在许多任务中主要充当着特征学习的作用,而学习完的特征才是后续应用的一个关键。本文将主要介绍,如何提取任意目标层的特征图。   本文以输入数据为图片为例。 二、具体步骤 1、参数模型 博主使用了ResNet50训练了一个人脸识别的网络   训练完成的深度学习模型,我们会保存一... 阅读详情

上一个博文讲了androidannotations的配置与使用,以及常见错误的解决方案。即:注解机制 androidannotations 让编程更随性,更轻松(一)
今天来详细地说明如何在代码中使用annotations进行注解。

关于注解的方法,官方文档的地址(英文好的朋友可以去尝试着学习一下):https://github.com/excilys/androidannotations/wiki/AvailableAnnotations

(PS:由于篇幅有限,这里只是介绍正常的用法,其实在使用注解时还需要注意一些细节性问题,如果大家遇到了什么问题,欢迎留言询问,我会及时给出合理的答案的(当然,在我能力之内的情况下~~))

下面我们一点一点来看:(这里会列出所有官方文档中给出的注解符号)
主要分为8个部分,咱们依次进行学习。

第一部分:Enhanced components

@Activity

@EActivity(R.layout.main)
//上面这句话的意思是:setContentView(R.layout.main);
public class MyActivity extends Activity {
}
@EActivity(R.id.main)
//FragmentActivity同理
public class DetailsActivity extends FragmentActivity {
}

@EApplation

@EApplication
//注解Applation这个类
public class MyApplication extends Application {
}

EBean

@EBean
//用这个符号来声明非android标准组件,比如自定义的一个class
//但是该类只能有一个构造方法,而且只能有一个参数(Context)或者是没有参数
public class MyClass {
}

@EFragment

@EFragment(R.layout.fragment)
public class MyFragment extends Fragment {
}

@ContentProvider

@EProvider
//注解另一大组件ContentProvider及其子类
public class MyContentProvider extends ContentProvider {
}

@EIntentService

@EIntentService
//对IntentService进行注解(IntentService继承自Service)
public class MyIntentService extends IntentService {
    @Override
    protected void onHandleIntent(Intent intent) {
        // Do nothing here
    }
}

@EService

@EService
//Service,IntentService的亲爹...
public class MyService extends Service {
}

@EView && @EViewGroup

//自定义View(必须是继承自View或者是View的子类才行)   
//这两个稍微有一点不同,即View和ViewGroup的不同
@EView
public class CustomButton extends Button {
    public CustomButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}
@EViewGroup(R.layout.custonViewGroup)
//ViewGroup   ....
public class CustomButton extends LinearLayout {
    public CustomButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
}

第二部分:Injection

@AfterExtras && @Extra

@EActivity
public class MyClass {
//这句话的意思是:getIntent().getStringExtra("someExtra")
  @Extra("someExtra")
  String someExtra;
//这句话的意思是:getIntent().getStringExtra("anotherExtra")
//注意:当没有指定参数名时,默认为int后的那个变量名,其他的同理
  @Extra
  int anotherExtra;
//加上这个注解,该函数将会在上面的@Extra执行完毕后获得执行的机会
  @AfterExtras
  public void doSomethingAfterExtrasInjection() {
    // someExtra and anotherExtra are set to the value contained in the incoming intent
    // if an intent does not contain one of the extra values the field remains unchanged
  }
}

@AfterInject

@EBean
public class MyClass {

  @SystemService
  NotificationManager notificationManager;

  @Bean
  MyOtherClass dependency;

  public MyClass() {
    // notificationManager and dependency are null
    //在构造函数执行时这两个成员变量还是空的
  }

  @AfterInject
  public void doSomethingAfterInjection() {
    // notificationManager and dependency are set
    //只有这两个成员变量被初始化结束之后该函数才会被调用。
    //和@AfterViews差不多哈,只不过这里是用在@EBean中的
  }

}

@AfterViews

@EActivity(R.layout.main)
public class MyActivity extends Activity {

    @ViewById
    TextView myTextView;

    @AfterViews
    //加上这个注解的效果是:只有myTextView被findViewById()结束之后才会
    //被调用,有效地避免了空指针情况的出现。
    //这个和上面的@AfterInject都是等待变量初始化完毕再执行,不过等待的
    //对象不同。
    void updateTextWithDate() {
        myTextView.setText("Date: " + new Date());
    }
@App
//You can inject the application class using the
// @App annotation:
//用@APP来声明一个@EApplation类对象
  @App 
  MyApplication application;

@FragmentById

 @FragmentById(R.id.myFragment)
 //对比@ViewById理解记忆...
  MyFragment myFragment2;

@HtmlRes

//其实就是加载string.xml文件中的一个元素
//和@TextRes差不多
  // Injects R.string.hello_html
  @HtmlRes(R.string.hello_html)
  Spanned myHelloString;

  //Also injects R.string.hello_html
  @HtmlRes
  CharSequence helloHtml;

@FromHtml

  @ViewById(R.id.my_text_view)
  @FromHtml(R.string.hello_html)
  //这句话的意思是setText(R.string.hello_html)
  TextView textView;

@HttpsClient

//创建一个Client并配置参数
@HttpsClient(trustStore=R.raw.cacerts, 
    trustStorePwd="changeit",
    keyStore=R.raw.client,
    keyStorePwd="secret",
    allowAllHostnames=false)
HttpClient httpsClient;
//当然,你也可以创建一个默认的客户端
@HttpsClient
HttpClient httpsClient;

@RootContext

@EBean
public class MyClass {

  @RootContext
  //等同于:content=getContext();
  Context context;

  // Only injected if the root context is an activity
  @RootContext
  //如果getActivity()存在的话,等同于activity=getActivity()
  //如果getActivity()不存在,则不会执行
  Activity activity;

  // Only injected if the root context is a service
 //同理
 @RootContext
  Service service;
}

@SystemService

//It is the same as calling the Context.getSystemService() 
//method.翻译:等同于调用Context.getSystemService() 方法
  @SystemService
  NotificationManager notificationManager;

第三部分:Event binding

@TextChange

@TextChange(R.id.helloTextView)
//添加Text更改事件监听
//等效于:textView.addTextChangedListener(new TextWatcher());
 void onTextChangesOnHelloTextView(CharSequence text, TextView hello, int before, int start, int count) {
 //参数介绍:
 //text:更改之后的字符串
 //hello:被更改的对象,这里是TextView
 //before:改变之前的字符串长度;
 //start:更改后的字符串的起始位置
 //count:被修改的字符串长度
 //注意:这些参数可以根据自己的需要自行选择,不要求全部添加,根据需要而定
 }

@BeforeTextChange

 @BeforeTextChange(R.id.helloTextView)
 //不用介绍了吧,和上一个是类似的,只不过这是改变前监听事件
 void beforeTextChangedOnHelloTextView(TextView hello, CharSequence text, int start, int count, int after) {
 }

@AfterTextChange

@AfterTextChange(R.id.helloTextView)
//同理...
 void afterTextChangedOnHelloTextView(Editable text, TextView hello) {
    // Something Here
 }

@EditorAction

 @EditorAction(R.id.helloTextView)
 //最后一个,这种函数基本用不到,在这里提一下,保证完整性
  void onEditorActionsOnHelloTextView(TextView hello, int actionId, KeyEvent keyEvent) {
    // Something Here
  }

@Click && @LongClick

//简单吧,点击事件监听
@Click(R.id.myButton)
void myButtonWasClicked() {
    [...]
}
//持续点击事件监听
@Click(R.id.myButton)
void myButtonWasClicked() {
    [...]
}

@ItemClick && @ItemLongClick && @ItemSelect

//别说你不会...
@ItemClick
    public void myListItemClicked(MyItem clickedItem) {
    }
    @ItemLongClick
    public void myListItemLongClicked(MyItem clickedItem) {
    }
    @ItemSelect
    public void myListItemSelected(boolean selected, MyItem selectedItem) {
    }

@SeekBarProgressChange && @SeekBarTouchStart &&@SeekBarTouchStop

//SeekBar拖动事件监听。简单,不说了...
@SeekBarProgressChange(R.id.seekBar)
 void onProgressChangeOnSeekBar(SeekBar seekBar, int progress, boolean fromUser) {
    // Something Here
 }

 @SeekBarProgressChange(R.id.seekBar)
 void onProgressChangeOnSeekBar(SeekBar seekBar, int progress, boolean fromUser) {
    // Something Here
 }

@SeekBarProgressChange(R.id.seekBar)
 void onProgressChangeOnSeekBar(SeekBar seekBar, int progress, boolean fromUser) {
    // Something Here
 }

第四部分:Threading

@Background

@Background
//新开一个线程去执行这里面的代码。
void someBackgroundWork(String aParam, long anotherParam) {
//这里的参数自定,没有什么要求
    [...]
}

@UiThread

@UiThread
//运行在UI线程中,参数没什么要求
void doInUiThread(String aParam, long anotherParam) {
    [...]
}

* @SupposeBackground*

 @SupposeBackground
 //这个也是在后台线程中运行的意思,但是比上一个更加智能,如果被一个UI线程
 //调用后就会报一个异常,来给你一个提示。
  void someMethodThatShouldNotBeCalledFromUiThread() {
  //if this method will be called from the UI-thread an exception will be thrown
  }

  @SupposeBackground(serial = {"serial1", "serial2"})
  //这个比上一个多了一点:就是执行这个函数的线程的id必须是指定的serial,
  //如果线程的id不是这两个serial,即使是后台线程,也会报错。
  void someMethodThatShouldBeCalledFromSerial1OrSerial2() {
  //if this method will be called from another thread then a background thread with a
  //serial "serial1" or "serial2", an exception will be thrown
  }
  //这里提一下:如果你想重写这个异常,可以通过如下方式:
  //BackgroundExecutor.setWrongThreadListener();

@SupposeUiThread

@SupposeUiThread
//同理...
  void someMethodThatShouldBeCalledOnlyFromUiThread() {
  //if this method will be called from a background thread an exception will be thrown
  }
  //同样的:如果你想重写这个异常,可以通过如下方式:
  //BackgroundExecutor.setWrongThreadListener();

第五部分:Misc

@InstanceState

@EActivity
public class MyActivity extends Activity {
//当此Activity被销毁时,会自动保存下面的两个变量。
//基本上还没用过...
    @InstanceState
    int someId;
    @InstanceState
    MySerializableBean bean;
}

@WindowFeature

@WindowFeature({ Window.FEATURE_NO_TITLE, Window.FEATURE_INDETERMINATE_PROGRESS })

@NoTitle
….
@Fullscreen
….

@CustomTitle

@CustomTitle(R.layout.custom_title)
//自定义Title,这平时根本用不到...
public class MyActivity extends Activity {
}

(啊,好多额,歇歇……..)

【MATLAB代码】二维平面的TOA定位,GDOP(几何精度因子)和CRLB(克拉美罗下界)计算与输出 本文介绍了一个MATLAB程序,用于计算二维定位场景中的几何精度因子(GDOP)和克拉美罗下界(CRLB)。该程序针对单目标和四个锚点配置,通过网格扫描法计算空间各点的GDOP分布,并以等高线图可视化展示。程序还可计算特定位置的理论定位精度下限(CRLB),输出X/Y方向标准差和GDOP值。核心算法通过构建几何矩阵和费舍尔信息矩阵实现,考虑了测量误差影响,并处理了特殊位置情况。程序提供了完整的源代码和参数修改说明,适用于定位系统精度分析。 阅读详情

相关推荐

UA-DETRAC数据集转YOLO格式

UA-DETRAC转YOLO

lafsca5的博客 9107

AndroidAnnotations——Injecting SystemServices注入系统服务

SystemServices Since AndroidAnnotations 1.0 Standard Android System Service injection Retrieving Android System Services requires remembering the name of the constant, and casti

博不如精 1464

硬件-电源-智能保护:eFuse选型与实战设计全攻略

本文深入解析eFuse在硬件电源设计中的关键作用与实战选型技巧。作为智能保护器件,eFuse能提供毫安级精度的过流保护、多重故障防护和智能恢复功能,比传统保险丝快1000倍以上。文章详细介绍了eFuse的工作原理、五大选型维度和PCB布局要点,帮助工程师有效预防电源异常导致的硬件损坏,适用于AI服务器、工业控制等场景。

weixin_30879169的博客 200

Framework层添加SystemService和Manager的超详细步骤

本文适用于Android 12中增加系统服务。

lvyaer_1122的博客 3869

测试用例经典练习之微信发红包测试用例

微信发红包测试用例

ZCYaiCLX3344的博客 1万+

【驭风计划 机器学习】实验6 基于集成学习的 Amazon 用户评论质量预测

¶随着电商平台的兴起,以及疫情的持续影响,线上购物在我们的日常生活中扮演着越来越重要的角色。在进行线上商品挑选时,评论往往是我们十分关注的一个方面。然而目前电商网站的评论质量参差不齐,甚至有水军刷好评或者恶意差评的情况出现,严重影响了顾客的购物体验。因此,对于评论质量的预测成为电商平台越来越关注的话题,如果能自动对评论质量进行评估,就能根据预测结果避免展现低质量的评论。本案例中我们将基于集成学习的方法对 Amazon 现实场景中的评论质量进行预测。

Mege1的博客 472

Android注解:自定义注解之源码注解

Android注解:自定义注解之源码注解 首先如果你对注解没有太多了了解,建议先看一下我之前的两篇博客 Android注解:Java注解 Android注解:Android 常用注解 ...

仲斌 1160

【Latex】【附安装文件】Miktex和TexStudio的安装与配置

这代表“构建并运行”,一般来说,我们只需要点这个按钮来运行Latex代码。保存一下代码文件,再运行一次,PDF文件会出现在与代码文件相同的文件夹下。安装完成后,你可能会跳转到一个页面中,你看到这个页面就意味着安装成功了。其实不需要你敲,你只要将下面的代码复制粘贴到你刚刚的文件中即可。成功安装MikTex后,我们需要进行更新,减少后续使用的麻烦。如果懂得将安装路径设置在你想要的盘中,你可以自己设置。双击上文的.exe文件后,你会看到如下画面。如果不懂,为避免不必要的麻烦,请直接点击“

未来就在脚下。 1万+

【Spring(五)】AnnotationConfigApplicationContext 原理

对于main函数中使用spring的场景,有两个常见的高级容器。一个是ClassPathXmlApplicationContext,基于classpath下的xml配置文件;另一种是AnnotationConfigApplicationContext,基于java配置文件。 各自的使用在这篇里有讲:https://blog.youkuaiyun.com/u010900754/article/details/...

u010900754的专栏 2万+

手把手教你用FPGA解析AD9680的JESD204B数据流(附Verilog代码)

本文详细介绍了如何利用FPGA解析AD9680的JESD204B数据流,包括协议核心机制、硬件平台搭建、Verilog代码实现及调试技巧。通过实战案例和代码示例,帮助工程师快速掌握高速ADC数据采集与处理技术,提升系统性能。

weixin_33640562的博客 372

Open3D 计算点云法向量的夹角【2026最新版】

计算法向量的夹角,博客长期更新,本文最新更新时间为:2026年3月7日。

点云侠的博客 3131

AnnotationConfigApplicationContext大体流程

测试类 public class AnnotationConfigTest { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); } } public AnnotationConfigApplicationContext(Class&

baixiaodong129的博客 349

AIGC实战——变分自编码器(Variational Autoencoder, VAE)

变分自编码器通过在模型中引入随机性,并限制潜空间中的点的分布来解决自编码器存在的问题。只需进行一些微小的调整,就可以将自编码器转换为变分自编码器,从而使其成为真正的生成模型。在本节中,我们介绍了变分自编码器的基本原理,并使用 `Keras` 实现了一个变分自编码器用于生成 Fashion-MNIST 图像。

盼小辉丶的博客 1万+

注解机制 androidannotations 让编程更随性,更轻松(一)

Google开源框架androidannotations深入学习2.annotations的配置 对着项目名称点击右键,找到倒数第二项,Properties,点击进去, 会看到上图,点击标号1的位置,在右侧把标号3的位置勾上,把4的位置选择成1.6以上(包括1.6)。。然后点击上图标号2,得到下图的样子。 上面三个打上红色箭头的全部选中,然后在最后一行apply一下,再选择Factory Pa

企鹅肖 1344

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

快速开发与维护:探索 AndroidAnnotations

在移动应用开发的世界中,效率和可维护性是两个至关重要的要素。随着应用功能的不断增长和用户需求的不断变化,开发者们一直在寻找能够提高生产力的工具和框架。今天,我们将深入探讨一个能够帮助开发者实现快速开发和易于维护的框架——AndroidAnnotations。

技术无疆 1532

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

终极AndroidAnnotations性能优化指南:如何用@Trace注解轻松分析应用瓶颈

AndroidAnnotations是一个强大的Android开发框架,它通过注解处理简化了Android应用开发流程。本文将详细介绍如何利用AndroidAnnotations框架中的@Trace注解功能,帮助开发者快速定位和解决应用性能问题,实现高效的性能分析与优化。 ## 什么是@Trace注解及其核心价值 在Android应用开发中,性能问题往往隐藏在复杂的代码逻辑中。AndroidA

gitblog_00547的博客 464

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

androidannotations与Google Maps的注解驱动集成

在Android开发中,Google Maps集成往往需要编写大量样板代码,从视图绑定到生命周期管理都充满重复工作。androidannotations框架通过注解驱动开发,将这些繁琐流程自动化,让开发者只需关注地图核心业务逻辑。本文将详细介绍如何通过注解快速实现Google Maps集成,解决传统开发中的代码冗余问题。 ## 核心注解工具与地图组件准备 androidannotations提...

gitblog_00718的博客 333

告别模板代码:AndroidAnnotations如何重塑Android开发效率

AndroidAnnotations是一个强大的开源框架,它通过注解驱动的方式帮助开发者消除冗长的模板代码,显著提升Android应用开发效率。本文将深入探讨这个被广泛使用的框架如何简化Android开发流程,让开发者专注于业务逻辑而非重复工作。 ## 🌟 什么是AndroidAnnotations? AndroidAnnotations是一个基于注解处理的框架,它能够在编译时生成必要的代码

gitblog_00885的博客 1157

Android响应式编程终极指南:RxJava与AndroidAnnotations完美集成

在现代Android开发中,响应式编程已经成为构建高效、可维护应用的核心技术。AndroidAnnotations作为一个强大的开源框架,通过与RxJava的深度集成,让响应式编程变得更加简单和直观。本指南将为你详细介绍如何在AndroidAnnotations项目中实现RxJava响应式编程,让你的应用开发效率提升到新的高度!🚀 ## 什么是Android响应式编程? **响应式编程**是

gitblog_00273的博客 321

Android注解框架androidannotations简介

写程序的目的当然是为了给用户提供产品及服务,写程序是辛苦的,有时要加班加点,要抓破头皮等。在写程序的过程中,我们应该尽量让开发工作变得更轻松,更有味。我们能做的每一件事就是尽量减少代码量,不要重复造轮子。Android开源框架https://github.com/excilys/androidannotations/wiki的目的正是于此,当然代码量减少了,不仅仅可以让工作更轻松,让读代码的人更轻

true100的专栏 913

androidannotations与CameraX的快速集成方案

你是否还在为Android相机开发中的繁琐配置和生命周期管理而头疼?是否希望用更少的代码实现更稳定的相机功能?本文将带你了解如何通过androidannotations框架简化CameraX的集成过程,让你在15分钟内搭建起一个基础但功能完善的相机应用。读完本文后,你将掌握使用注解快速注入相机服务、简化权限处理、优化生命周期管理的技巧。 ## 准备工作 在开始集成前,请确保你的开发环境满足以下...

gitblog_00459的博客 307

利用androidannotations的@Backgroud及@UiThread注解替换原生AsyncTask的写法

转载请注明 http://xuantan.iteye.com/admin/blogs/1826350   在android工程中,若想异步执行一个任务,可以继承AsyncTask<Param, Progress, Result>   类,并实现其中的回调方法即可。 如今,利用androidannotations的@Backgroud及@UiThread注解我们可以更轻松的做到...

玄坛{ blogging } 2424

零基础30分钟掌握AndroidAnnotations:快速开发Android应用终极指南

想要**快速开发**Android应用却苦于繁琐的代码编写?AndroidAnnotations正是你需要的**终极解决方案**!🚀 这个开源框架通过代码生成技术,让Android开发变得前所未有的简单高效。 ## 什么是AndroidAnnotations? AndroidAnnotations是一个强大的开源框架,专门为**加速Android开发**而生。它通过**简化代码**、**减少

gitblog_00784的博客 322

AndroidAnnotations开源框架如何下载与在eclipse的配置

一、下载AndroidAnnotations: ①、首先,登录https://github.com,注册一个账号,在搜索栏输入AndroidAnnotations搜索,搜索结果如下: ②、点击分享最多的,进入后,在左下角有个下载按钮,点击下载,如图: ③、打开下载包,我们要得的是他的两个以下jar包,如图: 二、AndroidAnnotations在eclipse中的配置 ①、将andr

guoyuannongfu2014的博客 867

AndroidAnnotations——Simple HTTPS 简单的HTTPS

不熟悉这块,所以前面的解释没怎么懂,例子倒是蛮好懂的 Simple HTTPS Since AndroidAnnotations 2.6 @HttpsClient The @HttpsClient simplifies HTTPS requests by injecting a HttpClient instance with a con

博不如精 1543

AndroidAnnotations网络请求终极优化指南:缓存策略与错误处理完整解决方案

在Android应用开发中,网络请求的性能优化是提升用户体验的关键因素。AndroidAnnotations作为一款强大的Android开发框架,提供了完善的网络请求优化解决方案。本指南将详细介绍如何利用AndroidAnnotations实现高效的缓存策略和健壮的错误处理机制。 ## 🚀 AndroidAnnotations网络请求优化核心优势 AndroidAnnotations框架通过

gitblog_00952的博客 481
上一篇: 注解机制 androidannotations 让编程更随性,更轻松(一)
下一篇: 开源框架xUtils的使用
肖小的人儿
博客等级 码龄12年 29粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值