AndroidAnnotations是一個開源框架,經過使用它開放出來的註解api,能夠大大的減小無關痛癢的代碼量,簡潔代碼。 官方文檔_github連接java
目前最新版本爲4.1.0android
applyplugin:'com.android.application'
//添加下面兩行配置
applyplugin:'android-apt'
defAAVersion='4.0.0'
android{
compileSdkVersion23
buildToolsVersion"23.0.2"
dependencies{
compilefileTree(dir:'libs',include:['*.jar'])
testCompile'junit:junit:4.12'
compile'com.android.support:appcompat-v7:23.1.1'
//添加這兩行配置
apt"org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
//再添加下面的配置
apt{
arguments{
androidManifestFilevariant.outputs[0].processResources.manifestFile
resourcePackageName"com.xxx.demo"(你項目的包名)
}
}複製代碼
項目包名可在AndroidManifest.xml中的package確認。git
dependencies{
classpath'com.android.tools.build:gradle:1.5.0'
//添加下面這行
classpath'com.neenbedankt.gradle.plugins:android-apt:1.4+'
}複製代碼
@EActivity(R.layout.acitvity_main)
public class MainActivity extends Activity{
...
}複製代碼
經常使用的有@EActivity、@EFragment、@EService等,進行註解了的組件纔可以使用其餘註解功能。github
@ViewById(R.id.tv_title)//此處可去掉括號部分
TextView tv_title;
@ViewById
ImageView img_menu;
@ViewById
RelativeLayout rl_light;
@Extra
String mTitle;
@StringRes(R.string.hello)
String hello;複製代碼
簡單的控件綁定,資源文件中的id與控件名一致便可不在註解後加上括號及對應控件的id,@Extra也是。其餘地方須要聲明控件id的皆同理。 當View相關的成員變量初始化完畢後,會調用擁有@AfterViews註解的方法,能夠在裏面初始化一些界面控件等。api
@Click
void img_back() {
finish();
overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);
}複製代碼
還有@TextChange、@ItemClick、@SeekBarProgressChange等。app
@UiThread
void doSomething(){
...
}
@Background
void doSomething(){
...
}複製代碼
UI線程執行的方法加個@UiThread,異步線程方法加個@Background,二者的交互就是方法直接的相互調用,不用再使用Handler去發送接收Message了。框架
@Receiver(actions = Utils.ACTION_BLE_DISCONNETED)
public void bleDisconnect() {
...
}
@Receiver(actions = Utils.ACTION_UPDATE_WATER_SHOW)
public void updateWaterShow(@Receiver.Extra(Utils.VALUE_ADDRESS) long water) {
if (switchIsOpen)
edt_water.setText(water + "");
}複製代碼
註冊廣播接收,簡單搞定,不須要其餘操做。相比下傳統的方式:異步
Private final BroadcastReceiver mGattUpdateReceiver = newBroadcastReceiver(){
@Override
public void onReceive(Contextcontext,Intentintent){
final Stringaction=intent.getAction();
if(Stringaction.equal(Utils.ACTION_STOP_SCAN)){
...
}
}
};
private IntentFilter makeGattUpdateIntentFilter() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Utils.ACTION_STOP_SCAN);
return intentFilter;
}
registerReceiver(mGattUpdateReceiver,makeGattUpdateIntentFilter());
unregisterReceiver(mGattUpdateReceiver);複製代碼
瞬間簡潔了不少吧ide
直接使用@SharedPref能夠簡單地使用SharedPreferences的功能。 首先,建一個類存放須要存取的數據:gradle
@SharedPref(value=SharedPref.Scope.UNIQUE)
public interface MyPrefs {
@DefaultBoolean(true)
boolean isFirstIn();
@DefaultString("")
String ignoreVersion();
@DefaultInt(0)
int shockLevel();
}複製代碼
括號後面的是默認值,接下來就是簡單的使用了,首先在用到的類裏聲明:
@Pref
MyPrefs_ myPrefs;
boolean isFirstIn = myPrefs.isFirstIn().get();
myPrefs.isFirstIn().put(false);複製代碼
使用起來特別方便,須要特別說明的是,這些數據要在一些不一樣的組件中同步共享,需在@SharedPref加上(value=SharedPref.Scope.UNIQUE),以前在activity和service中的數據老是對不上,找了很久才找到緣由。
想要在普通的類中也用上註解,只需在類名加上@EBean
@EBean
public class MyClass {
@UiThread
void updateUI() {
}複製代碼
使用時,聲明:
@EActivity
public class MyActivity extends Activity {
@Bean
MyClass myClass;
}複製代碼
有一些要注意的是: @EBean註解的類,只能有一個構造方法,且這個構造方法必須無參數或者只有context參數。 在activity等組件內聲明瞭後,不用再去new這個類,不然會出錯。
比較經常使用的一些方法及說明大概就是這些,固然Annotation還有很多東西,想要了解得更深刻能夠到文首的連接處查看官方的使用說明,進一步瞭解!