在当下的java的使用中,annotations已经被广泛运用,来提升开发效率。在android中,主要是帮助开发者处理一些前后台任务、rest 服务、应用类、代码片段等,让开发者专注于真正重要的东西。
(一)如何使用android annotations
具体使用方法请参看此文。
(二)使用范例
/** * android annotations范例 * * @author peter_wang * @create-time 2014-9-13 下午7:40:56 */ // 设置Activity的layout布局文件 @EActivity(R.layout.activity_http_request) public class HttpRequestActivity extends Activity { // 等同findviewById,名字默认是id名字 @ViewById TextView tv_response_main; //string资源文件信息 @StringRes(R.string.hello_world) String mHelloWorld; // 执行完oncreate后的动作 @AfterViews void init() { tv_response_main.setText(mHelloWorld); } // 点击事件,tv_response_main代表点击的触发View对象id @Click void tv_response_mainClicked() { getHttpData(); } // 后台执行线程 @Background void getHttpData() { try { // 得到HttpClient对象 HttpClient getClient = new DefaultHttpClient(); // 得到HttpGet对象 HttpGet request = new HttpGet("http://192.168.140.1:8080/SimpleServer/servlet/PayServlet?id=1"); // 客户端使用GET方式执行请教,获得服务器端的回应response HttpResponse response = getClient.execute(request); // 判断请求是否成功 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 获得输入流 InputStreamReader inStrem = new InputStreamReader(response.getEntity().getContent()); BufferedReader br = new BufferedReader(inStrem); StringBuilder sb = new StringBuilder(); String readLine = null; while ((readLine = br.readLine()) != null) { sb.append(readLine); } setHttpDataUI(sb.toString()); // 关闭输入流 inStrem.close(); } else { } } catch (Exception e) { e.printStackTrace(); } } // 线程中更新UI @UiThread void setHttpDataUI(String data) { tv_response_main.setText(data); } }
(三)工作原理
android annotations源于java annotations,简单了解java annotations可以看这篇文章。
java annotations中包含三种类型:SourceCode、Class、Runtime。
android annotations是SourceCode类型,利用Java Annotation Processing Tool (APT) 在编译源文件(*.java)之前,通过注解处理器(AnnotationProcessor)解释并处理源文件中的注解,生成 一些新的源文件,APT也会对新生成源文件进行编译,直到没有新的文件生成。新生成的源文件在apt_generated文件夹中。
编译前
package com.some.company; @EActivity public class MyActivity extends Activity { // ... }
package com.some.company; public final class MyActivity_ extends MyActivity { // ... }由此可知:Activity会生成新的Activity_文件,所以AndroidManifest.xml中用到的Activity和Application都要加下划线:xxActivity_,xxApplication_。
(四)优点
(1)简化开发,提高效率。依赖注入layout、views、resource、service等常用操作。
(2)开放。生成的源文件可见。
(3)不影响性能。因为不是runtime操作,都在编译期生成新的源文件,对程序运行速度没有影响。
原文地址:http://blog.csdn.net/wangpeifeng669/article/details/39254153