(一):基本介绍(Overview)
AndroidAnnotations使用很简单的方式进行工作,它会使用Java标准的APT(Annotation Processing Tool)自动添加额外的编译步骤在原生源代码。
对于每一个增强(注入)的Class.例如每一个使用@EActivity注入过的Activity,它都会生成一个使用该相同Activity 的名称后边加上一个下划线结尾的子类Activity。 package com.some.company; @EActivity public class MyActivity extends Activity { // ... } |
会在相同的包但另外一个源代码文件夹中生成如下的子类
package com.some.company; public final class MyActivity_ extends MyActivity { // ... } |
这个子类会通过覆盖一些方法(例如:onCreate())给你的Activity来添加相应的行为方法,然后进行委托给父类进行调用。这就是我们的Activity的配置:
<activity android:name=".MyListActivity_" /> |
(二):打开一个被注入过的Activity
在Android中,我们平时会通过以下这种方式来打来Activity:
startActivity(this, MyListActivity.class); |
然而,如果我们使用AndroidAnnotations,那么真正需要被启动的Activity就变成了MyListActivity_
startActivity(this, MyListActivity_.class); |
(三):意图构建(Intent Builder)
3.1 AndroidAnnotations已经提供一些静态的方法来让我们生成打开Activity
1.打开Activity
MyListActivity_.intent(context).start();
2.通过Activity来获取Intent
Intent intent = MyListActivity_.intent(context).get();
3.可以设置flags
MyListActivity_.intent(context).flags(FLAG_ACTIVITY_CLEAR_TOP).start();
4.可以设置额外的数据
MyListActivity_.intent(context).myDateExtra(someDate).start();
5.可以使用等效的startActivityForResult()方法
MyListActivity_.intent(context).startForResult(REQUEST_CODE);
请注意如下:你可以使用@OnActivityResult注解来进行获取返回值和额外的参数值数据
@OnActivityResult(REQUEST_CODE)
void onResult(int resultCode) { }3.2 可以使用意图构建器来传递可选的bundle参数数据
MyListActivity_.intent(context).withOptions(bundle).start();
3.3 使用意图构建起可以进行添加Activity打开的过渡动画
MyListActivity_.intent(context).start().withAnimation(enterAnimRes, exitAnimRes));
3.4 框架已经提供静态放来而让我们进行打开serice
3.4.1 Starting the service
MyService_.intent(context).start();3.4.2 Building an intent from the activity
Intent intent = MyService_.intent(context).build(); 3.4.3 You can provide flags MyService_.intent(context).flags(Intent.FLAG_GRANT_READ_URI_PERMISSION).start();(四):打开一个被注入过的Service
在Android中我们通常会通过如下的方法来开启一个service
startService(this, MyService.class);
然而使用AndroidAnnotations框架之后,真正被启动的Service必须为MyService_。
startService(this, MyService_.class);