AndroidAnnotations使用说明书—简介

一、AndroidAnnotations是什么:

AndroidAnnotations是一个利用注解方式来简化代码结构,提高开发效率的开源框架,类似开源框架还有:roboguice 、butterknife 、dagger 等。

AndroidAnnotations的目标是使Android应用程序易于开发和维护,而它使用的主要手段是通过注解减少代码量来实现这个目标。

开发者可以通过注解来表明自己的意图,然后AndroidAnnotations会在程序编译的时候生成和意图对应的代码。

AndroidAnnotations的特征如下:

 
     依赖注入:
注入views, extras, system services, resources等等;

 
       简化线程模型:
通过注解你的方法可以让他们在UI线程或者后台线程执行;

 
       事件绑定:
通过注解你的方法可以让它来处理视图的监听事件,让你远离丑陋的匿名监听器内部类;

 
       REST client:
创建一个客户端接口,AndroidAnnotations生成实现;

 
      没有魔法:
AndroidAnnotations在编译的时候生成与意图对应的代码,你可以检查代码,看看它是如何工作的。

androidannotations提供这么多简化代码的功能,但jar包还不到50KB,并且在运行时对程序性能没任何影响。

下面是实现同一功能的两段代码,一个是我们通常看到的代码,另外一个是使用AndroidAnnotations后的代码:

没有使用AndroidAnnotations时:

<span style="font-size:18px;">public class BookmarksToClipboardActivity extends Activity {

  BookmarkAdapter adapter;

  ListView bookmarkList;

  EditText search;

  BookmarkApplication application;

  Animation fadeIn;

  ClipboardManager clipboardManager;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN);

    setContentView(R.layout.bookmarks);

    bookmarkList = (ListView) findViewById(R.id.bookmarkList);
    search = (EditText) findViewById(R.id.search);
    application = (BookmarkApplication) getApplication();
    fadeIn = AnimationUtils.loadAnimation(this, anim.fade_in);
    clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

    View updateBookmarksButton1 = findViewById(R.id.updateBookmarksButton1);
    updateBookmarksButton1.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        updateBookmarksClicked();
      }
    });

    View updateBookmarksButton2 = findViewById(R.id.updateBookmarksButton2);
    updateBookmarksButton2.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        updateBookmarksClicked();
      }
    });

    bookmarkList.setOnItemClickListener(new OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> p, View v, int pos, long id) {
        Bookmark selectedBookmark = (Bookmark) p.getAdapter().getItem(pos);
        bookmarkListItemClicked(selectedBookmark);
      }
    });

    initBookmarkList();
  }

  void initBookmarkList() {
    adapter = new BookmarkAdapter(this);
    bookmarkList.setAdapter(adapter);
  }

  void updateBookmarksClicked() {
    UpdateBookmarksTask task = new UpdateBookmarksTask();

    task.execute(search.getText().toString(), application.getUserId());
  }

  private static final String BOOKMARK_URL = //
  "http://www.bookmarks.com/bookmarks/{userId}?search={search}";

  class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> {

    @Override
    protected Bookmarks doInBackground(String... params) {
      String searchString = params[0];
      String userId = params[1];

      RestTemplate client = new RestTemplate();
      HashMap<String, Object> args = new HashMap<String, Object>();
      args.put("search", searchString);
      args.put("userId", userId);
      HttpHeaders httpHeaders = new HttpHeaders();
      HttpEntity<Bookmarks> request = new HttpEntity<Bookmarks>(httpHeaders);
      ResponseEntity<Bookmarks> response = client.exchange( //
          BOOKMARK_URL, HttpMethod.GET, request, Bookmarks.class, args);
      Bookmarks bookmarks = response.getBody();

      return bookmarks;
    }

    @Override
    protected void onPostExecute(Bookmarks result) {
      adapter.updateBookmarks(result);
      bookmarkList.startAnimation(fadeIn);
    }

  }

  void bookmarkListItemClicked(Bookmark selectedBookmark) {
    clipboardManager.setText(selectedBookmark.getUrl());
  }

}</span>

使用AndroidAnnotations后:

<span style="font-size:18px;">@NoTitle
@Fullscreen
@EActivity(R.layout.bookmarks)
public class BookmarksToClipboardActivity extends Activity {

  BookmarkAdapter adapter;

  @ViewById
  ListView bookmarkList;

  @ViewById
  EditText search;

  @App
  BookmarkApplication application;

  @RestService
  BookmarkClient restClient;

  @AnimationRes
  Animation fadeIn;

  @SystemService
  ClipboardManager clipboardManager;

  @AfterViews
  void initBookmarkList() {
    adapter = new BookmarkAdapter(this);
    bookmarkList.setAdapter(adapter);
  }

  @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2})
  void updateBookmarksClicked() {
    searchAsync(search.getText().toString(), application.getUserId());
  }

  @Background
  void searchAsync(String searchString, String userId) {
    Bookmarks bookmarks = restClient.getBookmarks(searchString, userId);
    updateBookmarks(bookmarks);
  }

  @UiThread
  void updateBookmarks(Bookmarks bookmarks) {
    adapter.updateBookmarks(bookmarks);
    bookmarkList.startAnimation(fadeIn);
  }

  @ItemClick
  void bookmarkListItemClicked(Bookmark selectedBookmark) {
    clipboardManager.setText(selectedBookmark.getUrl());
  }

}
@Rest("http://www.bookmarks.com")
public interface BookmarkClient {

  @Get("/bookmarks/{userId}?search={search}")
  Bookmarks getBookmarks(String search, String userId);

}</span>

你会发现使用AndroidAnnotations后代码量大大减小了,还不到使用前代码量的一半,平常我们用到的findViewById、setOnClickListener、setContentView等等这类纯粹是耗体力劳动的代码,只需要在成员变量、方法或者类的顶部增加一句注解就搞定了,大大提高了咱们的工作效率。

二、如何使用AndroidAnnotations:

下面以windows系统下使用Eclipse IDE为例:

1、下载AndroidAnnotations:下载AndroidAnnotations

2、解压AndroidAnnotations,你会发现有AndroidAnnotations和examples两个文件夹,我们只使用AndroidAnnotations文件夹里面的内容,不管examples,我们自己创建一个工程,因为由于每个人的eclipse环境配置不一样,在导入examples下的工程的时候,编译没问题,但运行的时候会出现异常;

3、假定你已经在Eclipse中创建好了一个android工程,接下来就是为工程配置AndroidAnnotions,在你的工程目录下创建一个"libs"和"compile-libs"文件夹,然后把“androidannotations-X.X.X.jar”放到libs文件夹下,把“androidannotations-X.X.X-api.jar”文件放在compile-libs文件夹里,现在右键你的工程,选择“Properties”,会出现如下界面:

4、选择"Java
Compiler" ,确保 "Compiler compliance level"是“1.6”,否则处理器不会被激活;

5、选择 "Java
Compiler"—"Annotation Processing" 并选择"Enable annotation processing",如图:

6、选择 "Java Compiler“—”Annotation Processing“—”Factory Path",然后做如下图所示的操作:

7、切换到 "Java Build Path“ - ”Libraries",然后做如下图所示的操作(按照序号标识操作),有的同学可能不需要,因为高版本的ADT是支持自动将libs文件夹下的jar包加在这里面的:

8、完成以上步骤,clean一下工程,现在你就可以使用AndroidAnnotions为你的代码增加注解啦。

三、简单示例:

我整了一个示例工程,觉得配置麻烦的同学直接down下来吧。AndroidAnnotionsDemo

四、参考文档:

AndroidAnnotions Wiki

环境配置

时间: 2024-12-29 17:13:09

AndroidAnnotations使用说明书—简介的相关文章

AndroidAnnotations使用说明书—AndroidAnnotations是如何工作的?

AndroidAnnotations的工作方式很简单,它使用标准的java注入处理工具,自动添加了一个额外的编译步骤来生成源代码. 源码是什么?每一个增强的类,比如每一个用@EActivity注入的Activity,会自动生成一个以该类类名+下划线为类名的该Activity子类. 比如下面这个类: package com.some.company; @EActivity public class MyActivity extends Activity { // ... } 将会生成下面这个子类,

Android注解框架androidannotations简介

写程序的目的当然是为了给用户提供产品及服务,写程序是辛苦的,有时要加班加点,要抓破头皮等.在写程序的过程中,我们应该尽量让开发工作变得更轻松,更有味.我们能做的每一件事就是尽量减少代码量,不要重复造轮子.Android开源框架androidannotations(我简称AA框架)的目的正是于此,当然代码量减少了,不仅仅可以让工作更轻松,让读代码的人更轻松,维护代码更爽.正在开发的项目中,我们是用到了androidannotations注解框架,所以简单地讲讲: androidannotation

Android 最火快速开发框架AndroidAnnotations简介

1.目标   androidannotation框架要促进Android应用程序的编写和维护.相信简单的代码有明确的意图是实现这些目标的最佳途径. 当我们都沉浸在开发Android应用程序时,我们常常会想:为什么我们总是需要反复写相同的代码吗?为什么我们的应用越来越难维护呢? context和activity就像是神一样的东西,我们被复杂的线程玩耍,难以参考的API,加载很多的无名监听类,写大量不需要的异常抛出..我们不能改善它们吗? 2.怎么改善   利用Java 注解机制,开发者能展示他们的

androidannotations的background和UiThread配合使用参考

简介 androidannotations在开发中的代码规范思考:(MVC思考)时间太紧,先贴代码: Activity的代码: package edu.njupt.zhb.main; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Bean; import org.androidannotations.annotations.EActivity; imp

TDD学习笔记【二】---单元测试简介

大纲 Testing 的第一个切入点:单元测试. 本篇文章将针对单元测试进行简介,主要内容包含了5W: Why What Where Who When 而How 的部分,属于实现部分,将于下一篇文章介绍工具与简单的范例. 最后会提到测试用例所代表的意义与其重要性. 前言 单元测试,是开发人员最该写的测试程序,却也是最容易被忽略的测试. 大家常碰到的测试相关问题是: 往往一堆人写测试程序时,自以为是在写单元测试,却压根就不是单元测试,而是集成测试. 生产代码是我写的,如果测试程序也是我写,那有什么

Android 最火的高速开发框架AndroidAnnotations使用具体解释

Android 最火的高速开发框架androidannotations配置具体解释文章中有eclipse配置步骤.Android 最火高速开发框架AndroidAnnotations简介文章中的简介.本篇注重解说AndroidAnnotations中注解方法的使用. @EActivity 演示样例: @EActivity(R.layout.main) public class MyActivity extends Activity { } @fragment 演示样例: @EFragment(R

【转】GitHub 排名前 100 的安卓、iOS项目简介

GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者快速了解当前一些流行的 Android 开源库. 项目名称 项目简介 1. react-native 这 个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开源框架 Re

AndroidAnnotations库的使用

AndroidAnnotations(Code Diet) android快速开发框架简介: 项目地址:https://github.com/excilys/androidannotations 文档介绍:https://github.com/excilys/androidannotations/wiki 官网网址:http://androidannotations.org/ 特点:(1) 依赖注入:包括view,extras,系统服务,资源等等 (2) 简单的线程模型,通过annotation

Android 最火快速开发框架androidannotation简介

在上一篇Android 最火的快速开发框架androidannotations配置详解中介绍了在eclipse中配置androidannotation的步骤,如需配置请参考. 1.目标 androidannotation框架要促进Android应用程序的编写和维护.相信简单的代码有明确的意图是实现这些目标的最佳途径. 当我们都沉浸在开发Android应用程序时,我们常常会想:为什么我们总是需要反复写相同的代码吗?为什么我们的应用越来越难维护呢? context和activity就像是神一样的东西