日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

dagger android 学习(二):AndroidInjector的使用

發(fā)布時(shí)間:2023/12/31 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dagger android 学习(二):AndroidInjector的使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本系列博客主要用于自己學(xué)習(xí)積累,順便幫助新手入門,如有問(wèn)題,多多包涵。更詳細(xì)的一些使用可以看看其他更加詳細(xì)的博客。

dagger android 學(xué)習(xí)(一):dagger基礎(chǔ)使用
dagger android 學(xué)習(xí)(二):AndroidInjector的使用
dagger android 學(xué)習(xí)(三):ContributesAndroidInjector的進(jìn)一步優(yōu)化
dagger android 學(xué)習(xí)(四):基于dagger2的mvp架構(gòu)

在安卓實(shí)際開發(fā)中,我們需要用到許多的activity以及fragment,這樣我們?cè)谶M(jìn)行依賴注入的之后都要進(jìn)行一些重復(fù)的操作,比如在comonent中加入void inject(XXXActivity activity),以及在Activity中加入DaggerMyAppComponent.builder().build().inject(this),好在dagger2也提供了解決方法,讓我們不需要每次去寫inject方法。

添加依賴

implementation 'com.google.dagger:dagger:2.21' annotationProcessor 'com.google.dagger:dagger-compiler:2.21' implementation 'com.google.dagger:dagger-android:2.21' implementation 'com.google.dagger:dagger-android-support:2.21' annotationProcessor 'com.google.dagger:dagger-android-processor:2.21' 復(fù)制代碼

開始改造

AndroidInjector

創(chuàng)建一個(gè)接口繼承AndroidInjector

@Subcomponent(modules = {AndroidInjectionModule.class, }) public interface MainActivitySubcomponent extends AndroidInjector<MainActivity> {@Subcomponent.Builderabstract class Builder extends AndroidInjector.Builder<MainActivity> {} } 復(fù)制代碼

ActivityModule

實(shí)現(xiàn)用于綁定activity的Module

@Module(subcomponents = MainActivitySubcomponent.class) public abstract class MainActivityModule {@Binds@IntoMap@ClassKey(MainActivity.class)abstract AndroidInjector.Factory<?> bindMainActivityInjectorFactory(MainActivitySubcomponent.Builder builder); } 復(fù)制代碼

AppComponent

@Component(modules = {AndroidInjectionModule.class,AndroidSupportInjectionModule.class,MainActivityModule.class,Main2ActivityModule.class, }) public interface MyAppComponent {void inject(MyApplication application);@Component.Builderinterface Builder{MyAppComponent build();} } 復(fù)制代碼

Application

application繼承HasActivityInjector,實(shí)現(xiàn)inject方法,返回DispatchingAndroidInjector對(duì)象即可

public class MyApplication extends Application implements HasActivityInjector {@InjectDispatchingAndroidInjector<Activity> dispatchingAndroidInjector;@Overridepublic void onCreate() {super.onCreate();DaggerMyAppComponent.builder().build().inject(this);}@Overridepublic AndroidInjector<Activity> activityInjector() {return dispatchingAndroidInjector;} } 復(fù)制代碼

BaseActivity

baseActivity在super.onCreate之前調(diào)用AndroidInjection.inject(this),這樣之后的activity就只需要繼承它,直接可以使用了,不需要再單獨(dú)加入inject方法

open class BaseActivity: AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {AndroidInjection.inject(this)super.onCreate(savedInstanceState)} } 復(fù)制代碼

使用

使用的時(shí)候直接@inject就行,無(wú)需任何處理

public class MainActivity extends BaseActivity {@InjectA2 a2;@InjectC c;@InjectUserInfo userInfo;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.tv).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(MainActivity.this, Main2Activity.class));}});a2.someThingA();c.doSomethingC();userInfo.setAge("111");Log.e("DAGGER", userInfo.toString());} } 復(fù)制代碼

總結(jié)

dagger-android-support解決了每次新建Activity都需要在Activity中添加格子的inject方法,所有的inject都在BaseActivity中,這讓代碼簡(jiǎn)潔了很多。但是即使如此,還是有較多一部分的模板代碼,如例子中的ActivityModule和ActivitySubcomponent。每次新建一個(gè)Activity都需要?jiǎng)?chuàng)建這兩個(gè)類,這樣看起來(lái)還是很麻煩,好在dagger2還提供了@ContributesAndroidInjector注解解決了這個(gè)問(wèn)題。
demo地址:查看項(xiàng)目中的app模塊

轉(zhuǎn)載于:https://juejin.im/post/5cc7202fe51d456e31164a6c

總結(jié)

以上是生活随笔為你收集整理的dagger android 学习(二):AndroidInjector的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。