您的位置:首页 > 移动开发 > Android开发

AndroidAnnotations 是如何工作的

2014-04-06 13:40 393 查看


AndroidAnnotations工作在一个非常简单的方式。它会使用标准的Java注解处理工具自动添加一个额外的编译步骤生成的源代码。(译者注:即生成一个原有类名加“_”的类,这个类才是真正运行用的类)
源代码是什么样子的?
例如每个使用@EActivity注解的activity,将生成这个activity的一个子类,它的名字是在activity名称末尾追加一个下划线。
例如,下面的类:

package com.some.company;
@EActivity
publicclassMyActivityextends
Activity{
// ...
}

将生成以下子类,在同一个包路径中,但在另一个源文件夹:(译者注:在测试过程中,并未在src目录下发现生成的类。但此类确实生成了,它在哪里呢?实际是在项目根目录的.apt_generated文件夹下,在eclipse中无法查看到,需要到资源管理其相应文件夹中查看。)

packagecom.some.company;
publicfinalclassMyActivity_extendsMyActivity{
// ...
}

该子类重载一些方法(例如的onCreate()),通过委托方式调用了你的activity的相关方法。这就是为什么你必须在AndroidManifest.xml文件中为你的activity名称添加“_”的原因:

<activityandroid:name=".MyListActivity_"/>

启动一个使用注解的activity
在原始的Android开发中,你通常是这样启动activity的:

startActivity(this,MyListActivity.class);

然而,如果使用AndroidAnnotations,真正被启动的activity是MyListActivity_:

startActivity(this,MyListActivity_.class);

创建Intent
1.AndroidAnnotations2.4及以上版本
我们提供了一个静态的助手方法,让你启动真正的activity:

// 启动 activity
MyListActivity_.intent(context).start();

// 创建一个intent使用 activity
Intentintent=MyListActivity_.intent(context).get();

// 你也可以设置flags
MyListActivity_.intent(context).flags(FLAG_ACTIVITY_CLEAR_TOP).start();

//你甚至可以在activity中使用@Extra定义扩展数据并作为activity的启动参数
MyListActivity_.intent(context).myDateExtra(someDate).start();

2.AndroidAnnotations2.7及以上版本
你还可以使用startActivityForResult()方法:

MyListActivity_.intent(context).startForResult();

启动一个使用注解的Service
在原始的Android开发中,你通常是这样启动一个服务的:

startService(this,MyService.class);

然而,如果使用AndroidAnnotations,则真正的服务MyService_将被启动:

startService(this,MyService_.class);

创建Intent
1.AndroidAnnotations2.7及以上版本
我们提供了一个静态的方法,让你启动生成的service:

// 启动service
MyService_.intent(context).start();

// 通过service创建一个intent
Intentintent=MyService_.intent(context).build();

// 你能在启动service时使用flags
MyService_.intent(context).flags(Intent.FLAG_GRANT_READ_URI_PERMISSION).start();

是否有任何性能影响呢?
简短的回答是没有。更多关于可查看常见问题
现在你已经学习了基础知识,让我们再来看看如何让Activities更加强大。
AndroidAnnotations是由Pierre-Yves
Ricau创建,由eBusinessInformations赞助。
(注:本文阐述的只是它的工作方式,揭示了AndroidAnnotations是如何处理我们使用注解方式编写的代码。并不是你的代码要这样写)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: