android开发开源框架之AndroidAnnotations

关于AndroidAnnotations,用其他一些有经验的开发者的话来说,就是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。
它能够使代码更加精简,使项目更加容易维护,它的目标就是“Fast Android Development.Easy maintainance”。
通过这几天的接触,的确,它可以省去很多的代码,看它官网上给出的示例,几乎能省去一半我们能够编辑的代码,也就是说我们只需要在这一半里面做我们的逻辑就行了,其他编译的东西,就交给它来帮你处理,关于AndroidAnnotations,它的
首页:http://androidannotations.org/ 和github上的项目地址:https://github.com/excilys/androidannotations/wiki/Cookbook

before:

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

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

在官网之上,有使用androidannotations之后编写出来的程序和原生的程序之间的对比,可以发现明显的短了很多,而且还多了很多“@”的东东,这可以省去很多的包括定义控件等等代码篇幅。而只需关注与所需要的逻辑部分,只需在相应的入口注入即可。
最最最要注意的一点就是:使用AndroidAnnotations千万要记得,编译的时候会生成一个子类,这个子类的名称就是在
原来的类之后加了一个下划线“_”,比如这个例子产生的子类名称为“MyActivity_”,这就需要你在注册这个Activity的时候,在
AndroidManifest.xml中将 MyActivity 改为 MyActivity_ ,在热河使用此activity的时候也是使用MyActivity_来表示此类,如从另一个Activity跳转到此,例如:
startActivity(new Intent(this,MyActivity_.class));

在解压导入AndroidAnnotations的两个包androidannotations-api-2.7.1.jar和androidannotations-2.7.1.jar,其中一个是编译包,一个是api包,也就是会帮我们编译生成一个Activity_.的类,所以也就是不难理解他的机制了。在这几天的使用过程中,我发现在eclipse中会经常出现找不到这样的Activity_.文件,不知道是不是它编译的没有成功还是eclipse没有忽略此错误,而且在每次的修改代码后,clean就会出现这样的错误。

对于这个框架,很多人说方便,但也有很多人说麻烦,在实际的项目中基本没用过,而且后期维护是个问题,毕竟是第三方框架。就个人而言,我还是比较喜欢用原生的代码的形式。感兴趣的同学可以用用,有人说这是一种趋势,咋一看还以为它是自己写的注释方法呢。

anyShare分享到:
This entry was posted in 新闻动态. Bookmark the permalink.

发表评论