android工具-annotations
16lz
2021-01-26
在当下的java的使用中,annotations已经被广泛运用,来提升开发效率。在android中,主要是帮助开发者处理一些前后台任务、rest 服务、应用类、代码片段等,让开发者专注于真正重要的东西。
(一)如何使用android annotations
具体使用方法请参看此文。
(二)使用范例
[java] view plain copy
- /**
- *androidannotations范例
- *
- *@authorpeter_wang
- *@create-time2014-9-13下午7:40:56
- */
- //设置Activity的layout布局文件
- @EActivity(R.layout.activity_http_request)
- publicclassHttpRequestActivity
- extendsActivity{
- //等同findviewById,名字默认是id名字
- @ViewById
- TextViewtv_response_main;
- //string资源文件信息
- @StringRes(R.string.hello_world)
- StringmHelloWorld;
- //执行完oncreate后的动作
- @AfterViews
- voidinit(){
- tv_response_main.setText(mHelloWorld);
- }
- //点击事件,tv_response_main代表点击的触发View对象id
- @Click
- voidtv_response_mainClicked(){
- getHttpData();
- }
- //后台执行线程
- @Background
- voidgetHttpData(){
- try{
- //得到HttpClient对象
- HttpClientgetClient=newDefaultHttpClient();
- //得到HttpGet对象
- HttpGetrequest=newHttpGet("http://192.168.140.1:8080/SimpleServer/servlet/PayServlet?id=1");
- //客户端使用GET方式执行请教,获得服务器端的回应response
- HttpResponseresponse=getClient.execute(request);
- //判断请求是否成功
- if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
- //获得输入流
- InputStreamReaderinStrem=newInputStreamReader(response.getEntity().getContent());
- BufferedReaderbr=newBufferedReader(inStrem);
- StringBuildersb=newStringBuilder();
- StringreadLine=null;
- while((readLine=br.readLine())!=null){
- sb.append(readLine);
- }
- setHttpDataUI(sb.toString());
- //关闭输入流
- inStrem.close();
- }
- else{
- }
- }
- catch(Exceptione){
- e.printStackTrace();
- }
- }
- //线程中更新UI
- @UiThread
- voidsetHttpDataUI(Stringdata){
- 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文件夹中。
编译前
[java] view plain copy
- packagecom.some.company;
- @EActivity
- publicclassMyActivityextendsActivity{
- //...
- }
编译后
[java] view plain copy
- packagecom.some.company;
- publicfinalclassMyActivity_extendsMyActivity{
- //...
- }
(四)优点
(1)简化开发,提高效率。依赖注入layout、views、resource、service等常用操作。
(2)开放。生成的源文件可见。
(3)不影响性能。因为不是runtime操作,都在编译期生成新的源文件,对程序运行速度没有影响。
更多相关文章
- NDK r21编译FFmpeg 4.2.2(x86、x86_64、armv7、armv8)
- Error:(1, 0) Cause: com/android/build/gradle/LibraryPlugin :
- CyanogenMod 编译 Google Nexus S ("crespo") 全过程
- - 编译Native C的helloworld模块
- Android(安卓)OpenCV:读取Matlab生成的.mat文件并转换成OpenCV的M
- Android(安卓)JNI 学习之Android.mk文件
- 简单的JNI调用
- 分析Cocos2d Android(安卓)项目的生成和运行
- air for android hello world