AndroidAnnotations(Code Diet)android快速开发框架
最近用了一款很不错的android快速开发框架,1000行的代码瞬间变成几百行,不用你会后悔的
特点:
(1) 依赖注入:包括view,extras,系统服务,资源等等
(2) 简单的线程模型,通过annotation表示方法运行在ui线程还是后台线程
(3) 事件绑定:通过annotation表示view的响应事件,不用在写内部类
(4) REST客户端:定义客户端接口,自动生成REST请求的实现
(5) 没有你想象的复杂:AndroidAnnotations只是在在编译时生成相应子类
(6) 不影响应用性能:仅50kb,在编译时完成,不会对运行时有性能影响。
PS:与roboguice的比较:roboguice通过运行时读取annotations进行反射,所以可能影响应用性能,而AndroidAnnotations在编译时生成子类,所以对性能没有影响
现在我们开始试用这个吧
- 首先我们要准备一下基本环境
 
1.因为目前主流市场IDE环境转入android studio,所以我就直说它的搭建环境吧,打开build.gradle(project)文件导入我们需要的编译环境,下载编译环境工具包
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.1.+'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' //导入编译AndroidAnnotations框架需要使用的工具包
}
}
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
allprojects {
repositories {
jcenter() //下载jcenter服务器上的插件工具包
}
}
2.打开build.gradle(Module)文件导入我们需要的编译环境,导入下载的工具包apt,下载框架需要的包,然后在运行之前编译的配置,并且输出日志
apply plugin: 'android'
apply plugin: 'android-apt' //导入下载的工具 dependencies {
compile fileTree(include: '*.jar', dir: 'libs')
compile project(':SwitchCompatLibrary')
compile 'com.orhanobut:logger:1.1+'
compile 'org.androidannotations:androidannotations:3.3.1' //导入框架包
apt 'org.androidannotations:androidannotations:3.3.1' //用之前下载的工具根据框架包编译项目
}
apt{ //输出日志文件
arguments{
trace true
androidManifestFile variant.outputs[0].processResources.manifestFile
}
} android {
compileSdkVersion 15
buildToolsVersion "21.1.2"
lintOptions{
checkReleaseBuilds false
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs=['libs']
} instrumentTest.setRoot('tests') debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
大部分情况网络情况不好下,这个包是下载不下来的,我们可以下载在本地放在libs文件下
compile 'org.androidannotations:androidannotations:3.3.1' //导入框架包
apt 'org.androidannotations:androidannotations:3.3.1' //用之前下载的工具根据框架包编译项目
使用方法
compile files('libs/androidannotations.jar')
- 接下来我们使用了
 
闲话不多了,直接给代码了,下面这段代码是我们平时一般写android的原生代码
 public class BookmarksToClipboardActivity extends Activity {
   BookmarkAdapter adapter;
   ListView bookmarkList;
   EditText search;
   BookmarkApplication application;
   Animation fadeIn;
   ClipboardManager clipboardManager;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
     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);
     View updateBookmarksButton1 = findViewById(R.id.updateBookmarksButton1);
     updateBookmarksButton1.setOnClickListener(new OnClickListener() {
       @Override
       public void onClick(View v) {
         updateBookmarksClicked();
       }
     });
     View updateBookmarksButton2 = findViewById(R.id.updateBookmarksButton2);
     updateBookmarksButton2.setOnClickListener(new OnClickListener() {
       @Override
       public void onClick(View v) {
         updateBookmarksClicked();
       }
     });
     bookmarkList.setOnItemClickListener(new OnItemClickListener() {
       @Override
       public void onItemClick(AdapterView<?> p, View v, int pos, long id) {
         Bookmark selectedBookmark = (Bookmark) p.getAdapter().getItem(pos);
         bookmarkListItemClicked(selectedBookmark);
       }
     });
     initBookmarkList();
   }
   void initBookmarkList() {
     adapter = new BookmarkAdapter(this);
     bookmarkList.setAdapter(adapter);
   }
   void updateBookmarksClicked() {
     UpdateBookmarksTask task = new UpdateBookmarksTask();
     task.execute(search.getText().toString(), application.getUserId());
   }
   private static final String BOOKMARK_URL = //
   "http://www.bookmarks.com/bookmarks/{userId}?search={search}";
   class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> {
     @Override
     protected Bookmarks doInBackground(String... params) {
       String searchString = params[0];
       String userId = params[1];
       RestTemplate client = new RestTemplate();
       HashMap<String, Object> args = new HashMap<String, Object>();
       args.put("search", searchString);
       args.put("userId", userId);
       HttpHeaders httpHeaders = new HttpHeaders();
       HttpEntity<Bookmarks> request = new HttpEntity<Bookmarks>(httpHeaders);
       ResponseEntity<Bookmarks> response = client.exchange( //
           BOOKMARK_URL, HttpMethod.GET, request, Bookmarks.class, args);
       Bookmarks bookmarks = response.getBody();
       return bookmarks;
     }
     @Override
     protected void onPostExecute(Bookmarks result) {
       adapter.updateBookmarks(result);
       bookmarkList.startAnimation(fadeIn);
     }
   }
   void bookmarkListItemClicked(Bookmark selectedBookmark) {
     clipboardManager.setText(selectedBookmark.getUrl());
   }
 }
这段是我们用了框架后写过的代码
@NoTitle
@Fullscreen
@EActivity(R.layout.bookmarks)
public class BookmarksToClipboardActivity extends Activity { BookmarkAdapter adapter; @ViewById
ListView bookmarkList; @ViewById
EditText search; @App
BookmarkApplication application; @RestService
BookmarkClient restClient; @AnimationRes
Animation fadeIn; @SystemService
ClipboardManager clipboardManager; @AfterViews
void initBookmarkList() {
adapter = new BookmarkAdapter(this);
bookmarkList.setAdapter(adapter);
} @Click({R.id.updateBookmarksButton1, R.id.updateBookmarksButton2})
void updateBookmarksClicked() {
searchAsync(search.getText().toString(), application.getUserId());
} @Background
void searchAsync(String searchString, String userId) {
Bookmarks bookmarks = restClient.getBookmarks(searchString, userId);
updateBookmarks(bookmarks);
} @UiThread
void updateBookmarks(Bookmarks bookmarks) {
adapter.updateBookmarks(bookmarks);
bookmarkList.startAnimation(fadeIn);
} @ItemClick
void bookmarkListItemClicked(Bookmark selectedBookmark) {
clipboardManager.setText(selectedBookmark.getUrl());
} }
 @Rest("http://www.bookmarks.com")
 public interface BookmarkClient {
   @Get("/bookmarks/{userId}?search={search}")
   Bookmarks getBookmarks(String search, String userId);
 }
对比之后我们发现我们代码少了很多,很多人可能会顾虑代码少了,里面是不是做了很多消耗性能多余的操作,这里大家不用担心,根据AndroidAnnotations写的代码,在编译时生成子类,子类的代码和原生一模一样,所以对性能没有影响
- 常用地址
 
- api地址和demo地址https://github.com/excilys/androidannotations/wiki/Cookbook
 - 下载地址https://github.com/excilys/androidannotations
 
- 总结
 
- 基本语法就不和大家说呢,对程序员来说有了api文档和demo就行了
 - 这个框架语法很简单用一下就会了,就是环境有点蛋疼,这里只说了一个IDE环境搭配,其它的大家可以看文档
 - 东西虽然很好,但是希望android初学者学好基础后再来使用框架,框架是不断推出新的,如果你基础都不知道,以后变迁项目,或者项目报错你会对很多错误很茫然的,对你以后的发展也不好。
 
AndroidAnnotations(Code Diet)android快速开发框架的更多相关文章
- [原] Android快速开发框架-AndroidFine,GitHub开源
		
Android快速开发框架 UI组件,不止是简单整合,更易用 沉浸式状态栏,界面更漂亮 左滑返回,非常流畅 简单.可复用.易扩展的底部导航 PagerSlidingTabStrip,导航标签文字颜色和 ...
 - Android快速开发框架ZBLibrary源码分享
		
坐标标准库ZBLibrary,是一个MVP架构的Android快速开发框架,提供一套开发标准(UI,Data,Listener)以及模板和工具类并规范代码. 封装层级少,简单高效兼容性好.Androi ...
 - Android快速开发框架汇总
		
知乎贴:Android 开发有什么好的架构么? 里面这篇不错:Architecting Android…The clean way? 知乎贴: 一.如果对App的性能.包size有要求,对代码有洁癖不 ...
 - Android 快速开发框架XUtils
		
转载自:http://www.apkbus.com/forum.php?mod=viewthread&tid=241060&highlight=xUtils 最近搜了一些框架供初学者学 ...
 - 使用android快速开发框架afinal的FinalDb操作android数据库
		
http://my.oschina.net/yangfuhai/blog/87459 今天给大家介绍下#afinal#来操作android的数据库sqlite. #afinal#是一个android的 ...
 - android 快速开发框架
		
https://github.com/lipanquan/LPQRapidDevelopmentFramework 依赖LPQLibrary https://github.com/lipanquan/ ...
 - Android快速开发框架——AndroidAnnotations(Code Diet)
		
简介:AndroidAnnotations是一个依赖注入方式来简化代码结构 ,快速开发的开源框架,使结构代码更清晰,减少代码重复性.对今后我们做自动化测试和自动化埋点开发都会提高开发效率.跟我们之前使 ...
 - Android 快速开发框架:推荐10个框架:afinal、ThinkAndroid、andBase、KJFrameForAndroid、SmartAndroid、dhroid..
		
对于Android初学者以及对于我们菜鸟,这些大神们开发的轻量级框架非常有用(更别说开源的了). 下面转载这10个框架的介绍:(按顺序来吧没有什么排名). 一. Afinal 官方介绍: Afina ...
 - 常用Android快速开发框架
		
在做项目的过程中遇到了很多困难,于是收集了一些快速开发的框架,使用后大大提高了项目开发速度,无论什么项目都可以使用的到,在此分享给大家,希望能对大家有帮助!(个人建议:有时间的同学可以看一下这些优秀框 ...
 
随机推荐
- 思考JavaScript异常如何转为知识库?
			
线上 js 报错会变成一个邮件,发给前端开发 team,每个人自己认领.解决.其实这是一个不错的选择,也解决了最基本的问题:立即响应,修掉.不过也存在着一个问题,如何避免同样的错误?我的初步想法是这样 ...
 - webpack 配置文件
			
现如今,webpack非常的受欢迎,比较火的几款js框架都推荐使用webpack来构建项目,而webpack也确实非常强大,但是配置webpack缺常常带来很多问题,接下来就写一下我自己遇到的一些坑. ...
 - php无限极分类以及递归(thinkphp)
			
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
 - JS获取元素CSS值
			
一.getComputedStyle getComputedStyle 是一个可以获取当前元素所有最终使用的CSS属性值.返回的是一个CSS样式声明对象([object CSSStyleDeclara ...
 - Java基本数据类型总结
			
基本类型,或者叫做内置类型,是JAVA中不同于类的特殊类型.它们是我们编程中使用最频繁的类型.java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为变量的初始化. 1. Java ...
 - CString用法小结《转载》
			
http://blog.sina.com.cn/s/blog_a674ea930101aeey.html
 - linux之netstat命令
			
netstat用于显示各种网络相关的信息,如网络连接,路由表接口状态(interface statistics), masquerade连接,多播成员(Multicast Memberships)等等 ...
 - Redis学习手册(主从复制)
			
一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理 ...
 - Battleships in a Board
			
Given an 2D board, count how many different battleships are in it. The battleships are represented w ...
 - printf和scanf
			
一 printf和scanf(printf和scanf是c语言中的输入输出库函数) printf(”格式控制“,输出列表) <1>格式控制 其中包含 格式声明(%+相应格式对应字母).转义 ...