AndroidAnnotations使用说明书—简介

来源:互联网 发布:个人备案域名出售 编辑:程序博客网 时间:2024/04/27 16:30

一、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

           环境配置

0 0
原创粉丝点击