Android(安卓)最火快速开发框架androidannotation简介
在上一篇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
- publicclassBookmarksToClipboardActivityextendsActivity{
- BookmarkAdapteradapter;
- ListViewbookmarkList;
- EditTextsearch;
- BookmarkApplicationapplication;
- AnimationfadeIn;
- ClipboardManagerclipboardManager;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- 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);
- ViewupdateBookmarksButton1=findViewById(R.id.updateBookmarksButton1);
- updateBookmarksButton1.setOnClickListener(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- updateBookmarksClicked();
- }
- });
- ViewupdateBookmarksButton2=findViewById(R.id.updateBookmarksButton2);
- updateBookmarksButton2.setOnClickListener(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- updateBookmarksClicked();
- }
- });
- bookmarkList.setOnItemClickListener(newOnItemClickListener(){
- @Override
- publicvoidonItemClick(AdapterView<?>p,Viewv,intpos,longid){
- BookmarkselectedBookmark=(Bookmark)p.getAdapter().getItem(pos);
- bookmarkListItemClicked(selectedBookmark);
- }
- });
- initBookmarkList();
- }
- voidinitBookmarkList(){
- adapter=newBookmarkAdapter(this);
- bookmarkList.setAdapter(adapter);
- }
- voidupdateBookmarksClicked(){
- UpdateBookmarksTasktask=newUpdateBookmarksTask();
- task.execute(search.getText().toString(),application.getUserId());
- }
- privatestaticfinalStringBOOKMARK_URL=//
- "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
- classUpdateBookmarksTaskextendsAsyncTask<String,Void,Bookmarks>{
- @Override
- protectedBookmarksdoInBackground(String...params){
- StringsearchString=params[0];
- StringuserId=params[1];
- RestTemplateclient=newRestTemplate();
- HashMap<String,Object>args=newHashMap<String,Object>();
- args.put("search",searchString);
- args.put("userId",userId);
- HttpHeadershttpHeaders=newHttpHeaders();
- HttpEntity<Bookmarks>request=newHttpEntity<Bookmarks>(httpHeaders);
- ResponseEntity<Bookmarks>response=client.exchange(//
- BOOKMARK_URL,HttpMethod.GET,request,Bookmarks.class,args);
- Bookmarksbookmarks=response.getBody();
- returnbookmarks;
- }
- @Override
- protectedvoidonPostExecute(Bookmarksresult){
- adapter.updateBookmarks(result);
- bookmarkList.startAnimation(fadeIn);
- }
- }
- voidbookmarkListItemClicked(BookmarkselectedBookmark){
- clipboardManager.setText(selectedBookmark.getUrl());
- }
- }
After
- @NoTitle
- @Fullscreen
- @EActivity(R.layout.bookmarks)
- publicclassBookmarksToClipboardActivityextendsActivity{
- BookmarkAdapteradapter;
- @ViewById
- ListViewbookmarkList;
- @ViewById
- EditTextsearch;
- @App
- BookmarkApplicationapplication;
- @RestService
- BookmarkClientrestClient;
- @AnimationRes
- AnimationfadeIn;
- @SystemService
- ClipboardManagerclipboardManager;
- @AfterViews
- voidinitBookmarkList(){
- adapter=newBookmarkAdapter(this);
- bookmarkList.setAdapter(adapter);
- }
- @Click({R.id.updateBookmarksButton1,R.id.updateBookmarksButton2})
- voidupdateBookmarksClicked(){
- searchAsync(search.getText().toString(),application.getUserId());
- }
- @Background
- voidsearchAsync(StringsearchString,StringuserId){
- Bookmarksbookmarks=restClient.getBookmarks(searchString,userId);
- updateBookmarks(bookmarks);
- }
- @UiThread
- voidupdateBookmarks(Bookmarksbookmarks){
- adapter.updateBookmarks(bookmarks);
- bookmarkList.startAnimation(fadeIn);
- }
- @ItemClick
- voidbookmarkListItemClicked(BookmarkselectedBookmark){
- clipboardManager.setText(selectedBookmark.getUrl());
- }
- }
- @Rest("http://www.bookmarks.com")
- publicinterfaceBookmarkClient{
- @Get("/bookmarks/{userId}?search={search}")
- BookmarksgetBookmarks(Stringsearch,StringuserId);
- }
<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使用系统Intent实现分享功能及将应用加入分享列表++分享
- Android中Toast的用法简介(转)
- Android(安卓)按键消息path
- Android线程管理之ThreadLocal理解及应用场景
- android中分页加载的实现:)
- 流水笔记--2015-9-13
- Android(安卓)Wi-Fi 5G Only时Wi-Fi不可用
- 如何在Android中利用AIDL添加service
- 安卓入门教程(ps参考网络大部分教程,其中有些内容为搬砖。)