在上一篇Android 最火的快速开发框架androidannotations配置详解中介绍了在eclipse中配置androidannotation的步骤,如需配置请参考。

1.目标

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

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

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

2.怎么改善

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

3.特色

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

*简单的线程模型:在方法名上注释是在UI线程运行还是后台线程运行

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

*REST客户端:创建了一个客户端接口,androidannotation继承了springAndroid的接口。

*不是深不可测:因为AndroidAnnotations继承子类在编译时,你可以检查代码看看它是怎么工作的。

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

4.使用androidannotation的一些应用

5.对比

Before

  1. publicclassBookmarksToClipboardActivityextendsActivity{
  2. BookmarkAdapteradapter;
  3. ListViewbookmarkList;
  4. EditTextsearch;
  5. BookmarkApplicationapplication;
  6. AnimationfadeIn;
  7. ClipboardManagerclipboardManager;
  8. @Override
  9. protectedvoidonCreate(BundlesavedInstanceState){
  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. ViewupdateBookmarksButton1=findViewById(R.id.updateBookmarksButton1);
  20. updateBookmarksButton1.setOnClickListener(newOnClickListener(){
  21. @Override
  22. publicvoidonClick(Viewv){
  23. updateBookmarksClicked();
  24. }
  25. });
  26. ViewupdateBookmarksButton2=findViewById(R.id.updateBookmarksButton2);
  27. updateBookmarksButton2.setOnClickListener(newOnClickListener(){
  28. @Override
  29. publicvoidonClick(Viewv){
  30. updateBookmarksClicked();
  31. }
  32. });
  33. bookmarkList.setOnItemClickListener(newOnItemClickListener(){
  34. @Override
  35. publicvoidonItemClick(AdapterView<?>p,Viewv,intpos,longid){
  36. BookmarkselectedBookmark=(Bookmark)p.getAdapter().getItem(pos);
  37. bookmarkListItemClicked(selectedBookmark);
  38. }
  39. });
  40. initBookmarkList();
  41. }
  42. voidinitBookmarkList(){
  43. adapter=newBookmarkAdapter(this);
  44. bookmarkList.setAdapter(adapter);
  45. }
  46. voidupdateBookmarksClicked(){
  47. UpdateBookmarksTasktask=newUpdateBookmarksTask();
  48. task.execute(search.getText().toString(),application.getUserId());
  49. }
  50. privatestaticfinalStringBOOKMARK_URL=//
  51. "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
  52. classUpdateBookmarksTaskextendsAsyncTask<String,Void,Bookmarks>{
  53. @Override
  54. protectedBookmarksdoInBackground(String...params){
  55. StringsearchString=params[0];
  56. StringuserId=params[1];
  57. RestTemplateclient=newRestTemplate();
  58. HashMap<String,Object>args=newHashMap<String,Object>();
  59. args.put("search",searchString);
  60. args.put("userId",userId);
  61. HttpHeadershttpHeaders=newHttpHeaders();
  62. HttpEntity<Bookmarks>request=newHttpEntity<Bookmarks>(httpHeaders);
  63. ResponseEntity<Bookmarks>response=client.exchange(//
  64. BOOKMARK_URL,HttpMethod.GET,request,Bookmarks.class,args);
  65. Bookmarksbookmarks=response.getBody();
  66. returnbookmarks;
  67. }
  68. @Override
  69. protectedvoidonPostExecute(Bookmarksresult){
  70. adapter.updateBookmarks(result);
  71. bookmarkList.startAnimation(fadeIn);
  72. }
  73. }
  74. voidbookmarkListItemClicked(BookmarkselectedBookmark){
  75. clipboardManager.setText(selectedBookmark.getUrl());
  76. }
  77. }

After

  1. @NoTitle
  2. @Fullscreen
  3. @EActivity(R.layout.bookmarks)
  4. publicclassBookmarksToClipboardActivityextendsActivity{
  5. BookmarkAdapteradapter;
  6. @ViewById
  7. ListViewbookmarkList;
  8. @ViewById
  9. EditTextsearch;
  10. @App
  11. BookmarkApplicationapplication;
  12. @RestService
  13. BookmarkClientrestClient;
  14. @AnimationRes
  15. AnimationfadeIn;
  16. @SystemService
  17. ClipboardManagerclipboardManager;
  18. @AfterViews
  19. voidinitBookmarkList(){
  20. adapter=newBookmarkAdapter(this);
  21. bookmarkList.setAdapter(adapter);
  22. }
  23. @Click({R.id.updateBookmarksButton1,R.id.updateBookmarksButton2})
  24. voidupdateBookmarksClicked(){
  25. searchAsync(search.getText().toString(),application.getUserId());
  26. }
  27. @Background
  28. voidsearchAsync(StringsearchString,StringuserId){
  29. Bookmarksbookmarks=restClient.getBookmarks(searchString,userId);
  30. updateBookmarks(bookmarks);
  31. }
  32. @UiThread
  33. voidupdateBookmarks(Bookmarksbookmarks){
  34. adapter.updateBookmarks(bookmarks);
  35. bookmarkList.startAnimation(fadeIn);
  36. }
  37. @ItemClick
  38. voidbookmarkListItemClicked(BookmarkselectedBookmark){
  39. clipboardManager.setText(selectedBookmark.getUrl());
  40. }
  41. }
  1. @Rest("http://www.bookmarks.com")
  2. publicinterfaceBookmarkClient{
  3. @Get("/bookmarks/{userId}?search={search}")
  4. BookmarksgetBookmarks(Stringsearch,StringuserId);
  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

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

更多相关文章

  1. Android使用系统Intent实现分享功能及将应用加入分享列表++分享
  2. Android中Toast的用法简介(转)
  3. Android(安卓)按键消息path
  4. Android线程管理之ThreadLocal理解及应用场景
  5. android中分页加载的实现:)
  6. 流水笔记--2015-9-13
  7. Android(安卓)Wi-Fi 5G Only时Wi-Fi不可用
  8. 如何在Android中利用AIDL添加service
  9. 安卓入门教程(ps参考网络大部分教程,其中有些内容为搬砖。)

随机推荐

  1. 【Android有救】谷歌宣布125亿美元收购摩
  2. android UI系列 - 自定义4.0风格多功能对
  3. Nexus S Android 2.3.6 升级开始,将修正语
  4. 《金融时报》:谷歌正游说美商务部永久解除
  5. Android 性能优化——通过线程提高性能
  6. [新书]《Android和PHP开发最佳实践》
  7. [Android] [Android的视窗系统及显示机制
  8. Android 入门eclipse+ADT配置,bug处理及附
  9. Android layout 优化:使用include和merge
  10. 从初学android到选择每天收入50块,收入还