在当下的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操作,都在编译期生成新的源文件,对程序运行速度没有影响。