Android框架 dagger2知識點補缺

2021-08-15 19:25:33 字數 3026 閱讀 6095

1.scope機制可以使得在scope存在時保持類的單例

2.沒有指定作用域的@provides方法會在每次注入的時候都建立新的物件

3.乙個沒有scope的元件component不可以依賴乙個有scope的元件component,子元件和父元件的scope不能相同。

@subcomponent註解的可以成為子元件或公共元件,是組織component的三種方式中包含方式的實現媒介。這個出現的目的是為了如果有乙個元件每次建立依賴例項提供給別人時,恰好有多個其他元件裡面有需要它,那麼它就可以定義成子元件,需要的元件裡暴露出獲取子元件的依賴例項就行,如下:

@peractivity

public

inte***ce

activitycomponent

@subcomponent

@perfragment

public

inte***ce

actsubcomponent

1.需要在父元件的介面中宣告(在介面中定義的方法對於生成的物件是可訪問的)

2.能夠獲取父元件的所有元素(不僅僅是在介面中宣告的元素)

3.子元件的例項在每次呼叫的時候都會被建立

4.子元件這麼說 - 你的是我的,我的還是我的。父元件只能這麼說 - 你的不是我的,我的是我的

在宿主中使用@inject注入依賴例項時,用lazy<>把例項包裹起來,這樣在注入完之後只是例項化了乙個可以建立依賴例項的物件,真正需要使用時通過get方法獲取依賴例項,據說可以減少一定的載入時間提高使用者體驗(主要是集中建立物件的時間):

@inject

lazytest;

// 使用時

test t = test.get();

lazy只有第一次呼叫get()方法時,呼叫建構函式例項化物件,然後將該物件快取。以後再呼叫get()方法時,都會返回快取的例項,並且不會再呼叫建構函式,建立例項。

1.注入單個例項:

@module()

public

class

testmodule

}

2.注入子set:

@provides

@elementsintoset

public set

providermodelset()

3.使用依賴例項:

@inject

setmsetmodel;

為特定集合注入資料,應對提供資料的provides方法使用@qualifier註解限定

依賴注入map時,必須在編譯時指定map的key。對於向map提供元素的@provides方法,需要使用@intomap,同時指定該元素的key(例如@stringkey(「foo」)、@classkey(thing.class))。

這裡主要講述簡單key的注入方法,指map的key的資料型別為單一的某一種資料型別

如果注入的map的key的型別為string、class<?>等,在dagger.multibindings中的提供了一套標準的註解:

@module()

public

class

drinkmodule

@provides

@intomap

@classkey(drinkactivity.class)

return

}} @inject

@inject

這個註解用於注入map時自定義key:

@mapkey(unwrapvalue =

true)

@inte***ce testkey

@provides(type

=type

.map)

@intomap

@testkey("foo")

string providefookey()

@provides(type

=type

.map)

@intomap

@testkey("bar")

string providebarkey()

@inject

map<

string, string

>

map;

map.tostring() // => „」

同時還可以實現組合的map的key,指map的key由多個資料型別的成員組成:

@mapkey(unwrapvalue = false)

@inte***ce mykey

@provides

@intomap

@mykey(name = "abc", implementingclass = abc.class, thresholds = )

static string provideabc1510value()

unwrapvalue預設值為true,表示key為單獨型別;false時表示key為組合型別

dependencies
如果gradle外掛程式在2.3以下,借用apt外掛程式(不推薦,apt停止維護)

在根gradle中:

dependencies
在module的gradle中:

dependencies

Dagger2依賴注入框架的使用簡介

配置apt外掛程式 在build.gradle project 中新增如下 dependencies 新增如下 應用apt外掛程式 com.neenbedankt.android apt dependencies 別忘了加入lint warning android public class main...

Dagger如何使用

用過spring的肯定知道,當你建立乙個物件的時候肯定不會自己手動去建立乙個,而是由spring幫你注入乙個,當然dagger也是一樣的,物件的建立無需自己建立,低耦合。下面先簡單說下dagger的使用 1.需要apt外掛程式 2.新增相應的jar依賴 做完上面的兩步,接下來你還需要了解幾個基本註解...

Android開發 Android搜尋框架(二)

1.建立搜尋建議提供者 android已經為我們建立了乙個預設的,我們只需要繼承 searchrecentsuggestionprovider 就稍做修改就可以了。見 1 import android.content.searchrecentsuggestionsprovider 2 3 4 搜尋提...