Android Annotation框架初步实践

来源:互联网 发布:1×1矩阵的值怎么求 编辑:程序博客网 时间:2024/05/18 02:07

Android Annotation框架初步实践

实现模拟访问服务器数据和获取验证码倒计时的功能
关于集成别的文章里都有很多,这里就不说了
集成Android Annotation可以参考链接:
http://blog.csdn.net/caiwenfeng_for_23/article/details/45801151
,记录下集成失败的解决方案,在module的build gradle中加入

apt {    arguments {        androidManifestFile variant.outputs[0]?.processResources?.manifestFile    }}

集成好以后,新建一个Activity,注意在Manifest中默认注册的Activity名称上加上”_”,因为Android Annotation会默认生成一个你新建的Activity的子类.如果提示找不到没有关系,编译以后就不会报错了

在Activity上加上

@EActivity(R.layout.activity_main)

可以为Activity注册布局文件.自动生成的onCreate方法可以删掉.

    @ViewById(R.id.annotation_test)    TextView getData;    @ViewById    Button getvalid;

如果View的id与变量名一直,可以省略@ViewById后面的参数,如果名称不一致,则需要传入id,如@ViewById(R.id.getvalid)

接下来我们实现一个模拟获取服务器数据的功能:

    @Click    public void getuser() {        searchAsync("fancy", "xty");    }    @Background(id="main")    void searchAsync(String searchString, String userId) {        User user = model.getUser(searchString, userId);        upadateUser(user);    }    @UiThread    void upadateUser(User user) {        if(user != null)            getData.setText(user.getUsername() + "," + user.getPassword());    }

@Background中可以执行被添加@UiThread注解的方法.
被添加了@UiThread注解的方法和未被添加@UiThread注解的方法会在不同的线程执行.
上述代码中model.getUser方法实现的是一个耗时操作,并且在结束后返回一个新的User对象.
在实际项目中,可以把model.getUser替换成访问服务器数据的代码.如果使用http访问服务器,Annotation提供了@Rest来方便开发者实现.
如果使用webService访问服务器,可以自己封装好访问服务器的方法,在model层或者service层调用.

Android Annotation中的 @UiThread@Background 结合使用可以替代异步任务或者部分Handler实现的逻辑.接下来我们用这个框架来实现一个获取验证码倒计时的功能:

    int time = 10;    /**按钮的点击事件*/    @Click    public void getvalid() {        getvalidAsync();        getvalid.setEnabled(false);    }    /**倒计时操作*/    @Background(id="getvalid")    void getvalidAsync() {        if (time >= 0) {            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            time--;            updatebtntext();        }    }    /**实时更新ui*/    @UiThread    void updatebtntext() {        if (time >= 0) {            getvalid.setText(time + "s");            getvalidAsync();        } else {            getvalid.setText("重新获取");            getvalid.setEnabled(true);            time = 10;        }    }

测试,反复重新获取验证码不会出现倒计时越来越快的情况.AndroidAnnotation内部通过BackgroundExecutor 来对线程进行管理,这些我们都不必操心,只需要使用即可.

更多详细的功能使用,请参考博客:http://www.csdn123.com/html/topnews201408/29/729.htm

需要源码的,在评论回复邮箱即可.

0 0
原创粉丝点击