AndroidAnnnotations注入框架的工做原理(二)

(一):基本介紹(Overview)android

AndroidAnnotations使用很簡單的方式進行工做,它會使用Java標準的APT(Annotation Processing Tool)自動添加額外的編譯步驟在原生源代碼。
對於每個加強(注入)的Class.例如每個使用@EActivity注入過的Activity,它都會生成一個使用該相同Activity 的名稱後邊加上一個下劃線結尾的子類Activity。框架

package com.some.company;
@EActivity
public class MyActivity extends Activity {
  // ...
}ide

會在相同的包但另一個源代碼文件夾中生成以下的子類動畫

package com.some.company;
public final class MyActivity_ extends MyActivity {
// ...
}ui

 

這個子類會經過覆蓋一些方法(例如:onCreate())給你的Activity來添加相應的行爲方法,而後進行委託給父類進行調用。這就是咱們的Activity的配置:this

<activity android:name=".MyListActivity_" />spa

 

(二):打開一個被注入過的Activityci

在Android中,咱們平時會經過如下這種方式來打來Activity:get

startActivity(this, MyListActivity.class);it

然而,若是咱們使用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);

相關文章
相關標籤/搜索