Annotation經常使用註解使用說明

簡介

AndroidAnnotations是一個開源框架,經過使用它開放出來的註解api,能夠大大的減小無關痛癢的代碼量,簡潔代碼。 官方文檔_github連接java

第三方庫導入

目前最新版本爲4.1.0android

在app/目錄下的build.gradle(局部gradle)中添加下面配置:

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

在gradle/目錄下的build.gradle文件(全局gradle)中添加下面配置:

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

比較方便的一些註解

異步線程與UI線程

@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

SharedPreferences

直接使用@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中的數據老是對不上,找了很久才找到緣由。

@EBen

想要在普通的類中也用上註解,只需在類名加上@EBean

@EBean
public class MyClass {
  @UiThread
  void updateUI() {
}複製代碼

使用時,聲明:

@EActivity
public class MyActivity extends Activity {
  @Bean
  MyClass myClass;
}複製代碼

有一些要注意的是: @EBean註解的類,只能有一個構造方法,且這個構造方法必須無參數或者只有context參數。 在activity等組件內聲明瞭後,不用再去new這個類,不然會出錯。

總結

比較經常使用的一些方法及說明大概就是這些,固然Annotation還有很多東西,想要了解得更深刻能夠到文首的連接處查看官方的使用說明,進一步瞭解!

相關文章
相關標籤/搜索