在上一篇Android
最火的高速开发框架androidannotations配置具体解释
中介绍了在eclipse中配置androidannotation的步骤,如需配置请參考。

1.目标



androidannotation框架要促进Android应用程序的编写和维护。相信简单的代码有明白的意图是实现这些目标的最佳途径。

当我们都沉浸在开发Android应用程序时,我们经常会想:为什么我们总是须要重复写同样的代码吗?为什么我们的应用越来越难维护呢?

context和activity就像是神一样的东西,我们被复杂的线程玩耍,难以參考的API,载入非常多的无名监听类,写大量不须要的异常抛出..我们不能改善它们吗?

2.怎么改善



利用Java 注解机制,开发人员能展示他们的意图,还能让androidannotation框架在编译时继承管道代码。

3.特色



*依赖注入:注入view、extras数据、service、resource..

*简单的线程模型:在方法名上凝视是在UI线程执行还是后台线程执行

*事件绑定:凝视你的方法处理view的事件,不再有难看的匿名监听类。

*RESTclient:创建了一个client接口,androidannotation继承了springAndroid的接口。

*不是深不可測:由于AndroidAnnotations继承子类在编译时,你能够检查代码看看它是怎么工作的。

*AndroidAnnotation提供了这么多的好东西甚至它是小于50kb,在执行时没有不论什么性能影响。

4.使用androidannotation的一些应用



5.对照



Before


  1. public class BookmarksToClipboardActivity extends Activity {
  2. BookmarkAdapter adapter;
  3. ListView bookmarkList;
  4. EditText search;
  5. BookmarkApplication application;
  6. Animation fadeIn;
  7. ClipboardManager clipboardManager;
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. requestWindowFeature(Window.FEATURE_NO_TITLE);
  12. getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN);
  13. setContentView(R.layout.bookmarks);
  14. bookmarkList = (ListView) findViewById(R.id.bookmarkList);
  15. search = (EditText) findViewById(R.id.search);
  16. application = (BookmarkApplication) getApplication();
  17. fadeIn = AnimationUtils.loadAnimation(this, anim.fade_in);
  18. clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
  19. View updateBookmarksButton1 = findViewById(R.id.updateBookmarksButton1);
  20. updateBookmarksButton1.setOnClickListener(new OnClickListener() {
  21. @Override
  22. public void onClick(View v) {
  23. updateBookmarksClicked();
  24. }
  25. });
  26. View updateBookmarksButton2 = findViewById(R.id.updateBookmarksButton2);
  27. updateBookmarksButton2.setOnClickListener(new OnClickListener() {
  28. @Override
  29. public void onClick(View v) {
  30. updateBookmarksClicked();
  31. }
  32. });
  33. bookmarkList.setOnItemClickListener(new OnItemClickListener() {
  34. @Override
  35. public void onItemClick(AdapterView<?> p, View v, int pos, long id) {
  36. Bookmark selectedBookmark = (Bookmark) p.getAdapter().getItem(pos);
  37. bookmarkListItemClicked(selectedBookmark);
  38. }
  39. });
  40. initBookmarkList();
  41. }
  42. void initBookmarkList() {
  43. adapter = new BookmarkAdapter(this);
  44. bookmarkList.setAdapter(adapter);
  45. }
  46. void updateBookmarksClicked() {
  47. UpdateBookmarksTask task = new UpdateBookmarksTask();
  48. task.execute(search.getText().toString(), application.getUserId());
  49. }
  50. private static final String BOOKMARK_URL = //
  51. "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
  52. class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> {
  53. @Override
  54. protected Bookmarks doInBackground(String... params) {
  55. String searchString = params[0];
  56. String userId = params[1];
  57. RestTemplate client = new RestTemplate();
  58. HashMap<String, Object> args = new HashMap<String, Object>();
  59. args.put("search", searchString);
  60. args.put("userId", userId);
  61. HttpHeaders httpHeaders = new HttpHeaders();
  62. HttpEntity<Bookmarks> request = new HttpEntity<Bookmarks>(httpHeaders);
  63. ResponseEntity<Bookmarks> response = client.exchange( //
  64. BOOKMARK_URL, HttpMethod.GET, request, Bookmarks.class, args);
  65. Bookmarks bookmarks = response.getBody();
  66. return bookmarks;
  67. }
  68. @Override
  69. protected void onPostExecute(Bookmarks result) {
  70. adapter.updateBookmarks(result);
  71. bookmarkList.startAnimation(fadeIn);
  72. }
  73. }
  74. void bookmarkListItemClicked(Bookmark selectedBookmark) {
  75. clipboardManager.setText(selectedBookmark.getUrl());
  76. }
  77. }

After


  1. @NoTitle
  2. @Fullscreen
  3. @EActivity(R.layout.bookmarks)
  4. public class BookmarksToClipboardActivity extends Activity {
  5. BookmarkAdapter adapter;
  6. @ViewById
  7. ListView bookmarkList;
  8. @ViewById
  9. EditText search;
  10. @App
  11. BookmarkApplication application;
  12. @RestService
  13. BookmarkClient restClient;
  14. @AnimationRes
  15. Animation fadeIn;
  16. @SystemService
  17. ClipboardManager clipboardManager;
  18. @AfterViews
  19. void initBookmarkList() {
  20. adapter = new BookmarkAdapter(this);
  21. bookmarkList.setAdapter(adapter);
  22. }
  23. @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2})
  24. void updateBookmarksClicked() {
  25. searchAsync(search.getText().toString(), application.getUserId());
  26. }
  27. @Background
  28. void searchAsync(String searchString, String userId) {
  29. Bookmarks bookmarks = restClient.getBookmarks(searchString, userId);
  30. updateBookmarks(bookmarks);
  31. }
  32. @UiThread
  33. void updateBookmarks(Bookmarks bookmarks) {
  34. adapter.updateBookmarks(bookmarks);
  35. bookmarkList.startAnimation(fadeIn);
  36. }
  37. @ItemClick
  38. void bookmarkListItemClicked(Bookmark selectedBookmark) {
  39. clipboardManager.setText(selectedBookmark.getUrl());
  40. }
  41. }
  1. @Rest("http://www.bookmarks.com")
  2. public interface BookmarkClient {
  3. @Get("/bookmarks/{userId}?search={search}")
  4. Bookmarks getBookmarks(String search, String userId);
  5. }

须要注意的是androidannotation在编译时会生成一个子类,子类的名字是在原有的名字后面加"_",并且在AndroidManifest.xml中注冊加"_"的类,比如:

<activity android:name=".MyListActivity_" />

跳转activity时也有所不同:

startActivity(this, MyListActivity_.class);

从2.4版本号后提供了一个简便方法:

MyListActivity_.intent(context).start();

2.7版本号之后能够使用:

MyListActivity_.intent(context).startForResult();

开启service类似:

MyService_.intent(context).start();

很多其它的注解用法请參考官方文档。

https://github.com/excilys/androidannotations/wiki/Cookbook

如有问题请留言,转载注明出处。

Android 最火高速开发框架AndroidAnnotations简单介绍的更多相关文章

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

    Android 最火的高速开发框架androidannotations配置具体解释文章中有eclipse配置步骤,Android 最火高速开发框架AndroidAnnotations简介文章中的简介, ...

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

    Android 最火的高速开发框架androidannotations配置具体解释文章中有eclipse配置步骤.Android 最火高速开发框架AndroidAnnotations简介文章中的简介. ...

  3. 使用Kotlin开发Android应用(I):简单介绍

    使用Kotlin开发Android应用(I):简单介绍 @author ASCE1885的 Github 简书 微博 CSDN 原文链接 Kotlin是一门基于JVM的编程语言.它正成长为Androi ...

  4. Android框架之高速开发框架xUtil

    做Android开发我们通常是从原生态的開始,就是调用默认那些Android代码来开发我们的应用,可是到了一定程度,我们就想着怎么来高速开发我们的应用.这个时候我们就要着手来研究框架了. 以下介绍一个 ...

  5. Android Fragment(三)ListFragment简单介绍以及Fragment之间通信

    一.Fragment通信简单介绍:Fragments之间是不能够直接通信的,他们之间的通信是通过Activity这个中间件来通信的, 为了让Fragment跟它的Activity通信,我们可以在Fra ...

  6. Android 驱动(二) IIC简单介绍

    一. I2C简单介绍 I2C(Inter-Integrated Circuit)总线是一种由 Philips 公司开发的两线式串行总线,用于连接微控制器及其外围设备.I2C 总线最基本的长处就是简单性 ...

  7. Android培训准备资料之五大布局简单介绍

    本篇博客主要简单的给大家介绍一下Android五大布局 (1)LinearLayout(线性布局) (2)RelativeLayout(相对布局) (3)FrameLayout(帧布局) (4)Abs ...

  8. Android Mediaplayer各种属性和方法简单介绍

    主要涉及类:MediaPlayer (1) 当一个MediaPlayer对象被创建或者调用reset()方法之后,它处于空闲状态,调用release()方法后处于结束状态 1,一个MediaPlaye ...

  9. Android 升级脚本updater-script 的函数简单介绍

    这是Android系统来执行updater-scripts中的函数介绍. 函数都是的Edify语言.当调用这些函数结束的时候.会返回数据给脚本.当然,你也能够使用这些函数的返回值来确认成功与否,比如: ...

随机推荐

  1. 如何优雅的写UI——(5)选项卡功能实现

    先在我们的选项卡可以说能用了,每个标签页都能点进去,但是这还远远没到能用的地步,比如说你把窗口最大化后. 立马就露出马脚了,所以这篇我们要先讲讲tabctrl的最基本的功能实现 改变选项卡大小 上图的 ...

  2. 03009_SQL注入问题

    1.注入问题 (1)假设有登录案例SQL语句如下: SELECT * FROM 用户表 WHERE NAME = 用户输入的用户名 AND PASSWORD = 用户输的密码; (2)此时,当用户输入 ...

  3. 洛谷 P2837 晚餐队列安排

    P2837 晚餐队列安排 题目背景 Usaco Feb08 Bronze 题目描述 为了避免餐厅过分拥挤,FJ要求奶牛们分2批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想,所有第2批就餐 ...

  4. Android Cordova 插件开发之编写自己定义插件

    前言 本文适合Android+web的复合型人才,由于cordova本身就是混合开发,所以在Android开发的基础上,还要懂web相关技术(HTML+CSS+JS).可是也有例外,比方我.仅仅需负责 ...

  5. 28.semaphore跨进程通信

    根据id创建Semaphore,并初始化有一个信号量可用 name类型是char *...; HANDLE hsem = CreateSemaphoreA(NULL, 1, , name); 关闭句柄 ...

  6. HASH Partitioning--转载

    原文地址:https://dev.mysql.com/doc/refman/5.1/en/partitioning-hash.html HASH Partitioning [+/-] 18.2.3.1 ...

  7. 六、Docker+Gitlab

    原文:六.Docker+Gitlab (1)下载镜像: docker pull gitlab/gitlab-ce (2)运行镜像: GITLAB_HOME=`pwd`/data/gitlab dock ...

  8. 洛谷—— P1080 国王游戏

    https://www.luogu.org/problem/show?pid=1080 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整 ...

  9. 数值溢出(arithmetic overflow)问题与解决方案

    0. 典型场景 两数相加(乘法).两数相减.一个数的阶乘,一个数的幂,这些统统可能造成数值的溢出: 避免数值溢出的方法: 当把一个计算出的很大的数赋值给一个 int(2^31-1)类型变量存储时,一般 ...

  10. QQ群功能设计与心理学

    刚刚在一个Java技术交流群,发了个 "博客投票"的广告. 群主两眼一黑,瞬间就把我给干掉了. 看到QQ给出的系统消息,发现QQ群的一个功能做得很不错. 大家注意到,右边有个&qu ...