AndroidAnnotations 是如何工作的
2016-03-15 19:03
597 查看
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是如何处理我们使用注解方式编写的代码。并不是你的代码要这样写)
源代码是什么样子的?
例如每个使用@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是如何处理我们使用注解方式编写的代码。并不是你的代码要这样写)
相关文章推荐
- Android Raised Button
- android_内容观察者
- Android Listview相关
- Android屏幕相关总结
- android的Adb一些常用的指令
- android_内容访问者去访问联系人
- Android RecyclerView 使用完全解析
- (4.5.3.2)android studio编译项目,9 patch图片报错Crunching Cruncher
- butterknife简化android开发
- Android阻止AlertDialog关闭
- 加速 Gradle 构建大型 Android 项目的方法[转]
- (4.5.3.1)AndroidStudio用gradle编译中文乱码
- Activity之间使用intent传递大量数据带来问题总结
- Android实际音乐播放的代码
- FloatingActionButton的基础使用
- 关于EditText
- Android的Bitmap和BitmapDrawable类解析-android学习之旅(六十)
- Android中的数据库相关以及封装
- Canvas清理画布
- Android Studio中多项目共享Library