在当下的java的使用中,annotations已经被广泛运用,来提升开发效率。在android中,主要是帮助开发者处理一些前后台任务、rest 服务、应用类、代码片段等,让开发者专注于真正重要的东西。

(一)如何使用android annotations

具体使用方法请参看此文。


(二)使用范例

[java] view plain copy
  1. /**
  2. *androidannotations范例
  3. *
  4. *@authorpeter_wang
  5. *@create-time2014-9-13下午7:40:56
  6. */
  7. //设置Activity的layout布局文件
  8. @EActivity(R.layout.activity_http_request)
  9. publicclassHttpRequestActivity
  10. extendsActivity{
  11. //等同findviewById,名字默认是id名字
  12. @ViewById
  13. TextViewtv_response_main;
  14. //string资源文件信息
  15. @StringRes(R.string.hello_world)
  16. StringmHelloWorld;
  17. //执行完oncreate后的动作
  18. @AfterViews
  19. voidinit(){
  20. tv_response_main.setText(mHelloWorld);
  21. }
  22. //点击事件,tv_response_main代表点击的触发View对象id
  23. @Click
  24. voidtv_response_mainClicked(){
  25. getHttpData();
  26. }
  27. //后台执行线程
  28. @Background
  29. voidgetHttpData(){
  30. try{
  31. //得到HttpClient对象
  32. HttpClientgetClient=newDefaultHttpClient();
  33. //得到HttpGet对象
  34. HttpGetrequest=newHttpGet("http://192.168.140.1:8080/SimpleServer/servlet/PayServlet?id=1");
  35. //客户端使用GET方式执行请教,获得服务器端的回应response
  36. HttpResponseresponse=getClient.execute(request);
  37. //判断请求是否成功
  38. if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
  39. //获得输入流
  40. InputStreamReaderinStrem=newInputStreamReader(response.getEntity().getContent());
  41. BufferedReaderbr=newBufferedReader(inStrem);
  42. StringBuildersb=newStringBuilder();
  43. StringreadLine=null;
  44. while((readLine=br.readLine())!=null){
  45. sb.append(readLine);
  46. }
  47. setHttpDataUI(sb.toString());
  48. //关闭输入流
  49. inStrem.close();
  50. }
  51. else{
  52. }
  53. }
  54. catch(Exceptione){
  55. e.printStackTrace();
  56. }
  57. }
  58. //线程中更新UI
  59. @UiThread
  60. voidsetHttpDataUI(Stringdata){
  61. tv_response_main.setText(data);
  62. }
  63. }


(三)工作原理

android annotations源于java annotations,简单了解java annotations可以看这篇文章。

java annotations中包含三种类型:SourceCode、Class、Runtime。

android annotations是SourceCode类型,利用Java Annotation Processing Tool (APT)在编译源文件(*.java)之前,通过注解处理器(AnnotationProcessor)解释并处理源文件中的注解,生成 一些新的源文件,APT也会对新生成源文件进行编译,直到没有新的文件生成。新生成的源文件在apt_generated文件夹中。

编译前

[java] view plain copy
  1. packagecom.some.company;
  2. @EActivity
  3. publicclassMyActivityextendsActivity{
  4. //...
  5. }

编译后

[java] view plain copy
  1. packagecom.some.company;
  2. publicfinalclassMyActivity_extendsMyActivity{
  3. //...
  4. }
由此可知:Activity会生成新的Activity_文件,所以AndroidManifest.xml中用到的Activity和Application都要加下划线:xxActivity_,xxApplication_。


(四)优点

(1)简化开发,提高效率。依赖注入layout、views、resource、service等常用操作。

(2)开放。生成的源文件可见。

(3)不影响性能。因为不是runtime操作,都在编译期生成新的源文件,对程序运行速度没有影响。

更多相关文章

  1. NDK r21编译FFmpeg 4.2.2(x86、x86_64、armv7、armv8)
  2. Error:(1, 0) Cause: com/android/build/gradle/LibraryPlugin :
  3. CyanogenMod 编译 Google Nexus S ("crespo") 全过程
  4. - 编译Native C的helloworld模块
  5. Android(安卓)OpenCV:读取Matlab生成的.mat文件并转换成OpenCV的M
  6. Android(安卓)JNI 学习之Android.mk文件
  7. 简单的JNI调用
  8. 分析Cocos2d Android(安卓)项目的生成和运行
  9. air for android hello world

随机推荐

  1. android ellipsize 属性详解
  2. android中用Spannable在TextView中设置超
  3. android ui界面设计参数讲解
  4. Android(安卓)TextView常用属性介绍Andro
  5. Android(安卓)数据的读取与写入2
  6. Android之screenOrientation属性
  7. Android中的inputType属性简单用法.
  8. Android(安卓)xml资源文件中@、@android:
  9. Android内核学习笔记
  10. Android相对布局属性全集