轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://www.reibang.com/p/df0d8134db43
本文出自:【江清清博客-代號(hào)獨(dú)狼】
(一):基本介紹(Overview)
AndroidAnnotations使用很簡(jiǎn)單的方式進(jìn)行工作,它會(huì)使用Java標(biāo)準(zhǔn)的APT(Annotation Processing Tool)自動(dòng)添加額外的編譯步驟在來(lái)生源代碼刺彩。
那么什么是源代碼呢?對(duì)于每一個(gè)增強(qiáng)(注入)的Class.例如每一個(gè)使用@EActivity注入過(guò)的Activity扩氢,它都會(huì)生成一個(gè)使用該相同Activity的名稱后邊加上一個(gè)下劃線結(jié)尾的子類Activity。
例如:下面的類:
packagecom.some.company;
@EActivity
publicclassMyActivityextendsActivity {
// ...
}
會(huì)在相同的包但另外一個(gè)源代碼文件夾中生成如下的子類
package com.some.company;
public final class MyActivity_extendsMyActivity {
// ...
}
這個(gè)子類會(huì)通過(guò)覆蓋一些方法(例如:onCreate())給你的Activity來(lái)添加相應(yīng)的行為方法,然后進(jìn)行委托給父類進(jìn)行調(diào)用。
這就是我們真正使用的類
<activity android:name=".MyListActivity_" />
(二):打開(kāi)一個(gè)被注入過(guò)的Activity
在Android中叹螟,我們平時(shí)會(huì)通過(guò)以下這種方式來(lái)打來(lái)Activity
startActivity(this, MyListActivity.class);
然而,如果我們使用AndroidAnnotations普舆,那么真正需要被啟動(dòng)的Activity就變成了MyListActivity_
startActivity(this, MyListActivity_.class);
(三):意圖構(gòu)建(Intent Builder)
3.1.AndroidAnnotations已經(jīng)提供一些靜態(tài)的方法來(lái)讓我們生成打開(kāi)Activity
//打開(kāi)Activity
MyListActivity_.intent(context).start();
//通過(guò)Activity來(lái)獲取Intent
Intent intent = MyListActivity_.intent(context).get();
//可以設(shè)置flags
MyListActivity_.intent(context).flags(FLAG_ACTIVITY_CLEAR_TOP).start();
//可以設(shè)置額外的數(shù)據(jù)
MyListActivity_.intent(context).myDateExtra(someDate).start();
3.2.可以使用等效的startActivityForResult()方法
MyListActivity_.intent(context).startForResult(REQUEST_CODE);
請(qǐng)注意如下:你可以使用@OnActivityResult注解來(lái)進(jìn)行獲取返回值和額外的參數(shù)值數(shù)據(jù)
@OnActivityResult(REQUEST_CODE)
voidonResult(int resultCode) {
}
3.3.可以使用意圖構(gòu)建器來(lái)傳遞可選的bundle參數(shù)數(shù)據(jù)
MyListActivity_.intent(context).withOptions(bundle).start();
3.4.使用意圖構(gòu)建起可以進(jìn)行添加Activity打開(kāi)的過(guò)渡動(dòng)畫(huà)
MyListActivity_.intent(context).start().withAnimation(enterAnimRes, exitAnimRes));
3.5.框架已經(jīng)提供靜態(tài)放來(lái)而讓我們進(jìn)行打開(kāi)serice
// Starting the service
MyService_.intent(context).start();
// Building an intent from theactivity
Intent intent = MyService_.intent(context).build();
// You can provide flags
MyService_.intent(context).flags(Intent.FLAG_GRANT_READ_URI_PERMISSION).start();
(四):打開(kāi)一個(gè)被注入過(guò)的Service
在Android中我們通常會(huì)通過(guò)如下的方法來(lái)開(kāi)啟一個(gè)service
startService(this, MyService.class);
然而使用AndroidAnnotations框架之后帐萎,真正被啟動(dòng)的Service必須為MyService_。
startService(this, MyService_.class);
以上就是完成對(duì)AndroidAnnotations框架的工作的基本原理敞曹,深入源代碼的講解后面會(huì)進(jìn)行相應(yīng)更新账月。
FastDev4Android項(xiàng)目已經(jīng)添加配置了AndroidAnnotations框架,同時(shí)相應(yīng)的AndroidManifest.xml文件已經(jīng)做了相應(yīng)的修改.歡迎大家去Github站點(diǎn)進(jìn)行clone或者下載瀏覽.
https://github.com/jiangqqlmj/FastDev4Android
同時(shí)歡迎大家star和fork整個(gè)開(kāi)源快速開(kāi)發(fā)框架項(xiàng)目~如果有什么意見(jiàn)和反饋澳迫,歡迎留言局齿,必定第一時(shí)間回復(fù)。也歡迎有同樣興趣的童鞋加入到該項(xiàng)目中來(lái)橄登,一起維護(hù)該項(xiàng)目抓歼。