android工具-annotations

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


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。