Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 最火快速開發框架androidannotation簡介

Android 最火快速開發框架androidannotation簡介

編輯:關於Android編程

 

 

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

After



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

  1. @Rest(http://www.bookmarks.com)
  2. public interface BookmarkClient {
  3.  
  4. @Get(/bookmarks/{userId}?search={search})
  5. Bookmarks getBookmarks(String search, String userId);
  6.  
  7. }
需要注意的是androidannotation在編譯時會生成一個子類,子類的名字是在原有的名字後面加_,而且在AndroidManifest.xml中注冊加_的類,例如:

 

跳轉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. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved