Android Annotation框架初步实践

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值