
Android Studio MVP 模板如何玩转 Dagger 2 依赖注入Component、Module 与 Scope 全解【免费下载链接】Android-Studio-MVP-templateAndroid MVP template for Android Studio项目地址: https://gitcode.com/gh_mirrors/an/Android-Studio-MVP-templateAndroid Studio MVP 模板Android-Studio-MVP-template是一款免费开源的代码生成工具专为 Android 开发者打造内置 Dagger 2 依赖注入一键生成完整的 MVP 架构骨架让你无需手写样板代码即可掌握 Component、Module 与 Scope 的用法。图中在 Android Studio 的 New 菜单下已出现MVP分组包含 MVP Activity、MVP Boilerplate、MVP Fragment 三个模板选项。一键安装 Android Studio MVP 模板最快上手方法 Mac 用户克隆仓库后执行安装脚本模板会自动拷贝到 Android Studio 的模板目录git clone https://gitcode.com/gh_mirrors/an/Android-Studio-MVP-template cd Android-Studio-MVP-template ./install.shWindows 用户手动将MVPFragment、MVPActivity、MVPBoilerplate三个目录复制到 Android Studio 安装目录下的plugins/android/lib/templates/activities/即可。安装成功后重启 Android Studio在根包文件夹上右键 → New → MVP就能看到下图中的三个新选项。生成注入骨架只需 2 步 ⚙️第 1 步生成基础骨架每个项目只做一次在根包文件夹右键选择MVP Boilerplate它会一次性生成 Dagger 2 注入体系的全部基础类应用类App作为你的 Application 使用注入体系AppComponent、AppModule、ActivityScope、FragmentScope基类BaseActivity、BaseFragment、BasePresenter、BasePresenterImpl、BaseInteractorPresenter 保活相关PresenterFactory、PresenterLoader第 2 步创建你的第一个页面同样从根包文件夹右键选择MVP Activity或 MVP Fragment它将自动生成该页面完整的 MVP 分层Activity、布局、View 接口、Presenter 接口与实现、Interactor 接口与实现以及专属于这个页面的Component 和 Module。⚠️ 两个模板都必须从根包文件夹创建否则会在子包下重新生成一整套层级结构这不是你想要的效果。ComponentDagger 2 依赖注入的组装工厂 Component 是 Dagger 2 中的依赖组装工厂模板里一共有两级应用级 —— AppComponent.java.ftlSingleton Component(modules {AppModule.class}) public interface AppComponent { Context getAppContext(); YourApp getApp(); }它用Singleton标注应用级作用域挂载AppModule对外暴露Context和 App 实例是整个依赖图的根节点。页面级 —— Component.java.ftlActivityScope Component(dependencies AppComponent.class, modules MainViewModule.class) public interface MainViewComponent { void inject(MainActivity activity); }注意dependencies AppComponent.class页面级 Component复用应用级依赖再叠加本页面自己的 Module并通过inject()方法把依赖注入到 Activity 中。Fragment 模板的 Component.java.ftl 结构相同只是作用域换成了FragmentScope。Module声明依赖从哪来的配方本 Module 是一组Provides方法告诉 Dagger 2 如何创建每个依赖应用级 —— AppModule.java.ftl提供Context和App实例两个全局依赖。页面级 —— Module.java.ftl以 MainView 为例提供两个依赖MainViewInteractorMVP 中的 Model 层接口PresenterFactoryPresenter 工厂负责把 Interactor 组装进 Presenter 实现这样 Activity 里永远只需面向接口编程具体实现类由 Dagger 2 在编译期自动装配。Scope三种作用域决定依赖活多久 ⏱️Scope作用域控制同一个依赖实例的存活范围。模板内置了三种作用域定义位置含义SingletonDagger 2 自带应用级整个 App 生命周期内只有一个实例ActivityScopeActivityScope.java.ftlActivity 级跟随 Activity 生命周期FragmentScopeFragmentScope.java.ftlFragment 级跟随 Fragment 生命周期后两者都是自定义注解用Scope元注解声明。原理AppComponent标注Singleton意味着根依赖全局共享页面级 Component 标注ActivityScope/FragmentScope则页面内的依赖只在该页面存活期间共享。注入全流程从 App 到 Activity 的 3 步 构建根 ComponentApp.java.ftl 在onCreate中组装DaggerAppComponent并持有引用mAppComponent DaggerAppComponent.builder() .appModule(new AppModule(this)) .build();触发注入BaseActivity.java.ftlFragment 同理见 BaseFragment.java.ftl在onCreate中调用injectDependencies()从 Application 取出AppComponent。页面接线你的 Activity 实现setupComponent(AppComponent)方法把根 Component 传入本页面 Component 的 builder最后执行mainViewComponent.inject(this)依赖就位 ✅记得在 AndroidManifest.xml 中使用生成的App类作为 Application否则getAppComponent()会返回 null。新手常见 4 个坑一次避开 ⚠️不在根包创建模板→ 会在子包重复生成整套 MVP 层级Manifest 里没换成生成的 App 类→ 注入拿不到 AppComponent在onCreate中直接调用 Presenter→ Presenter 由 Loader 异步加载此时mPresenter可能为 null所有调用应放在onStart之后并注意判空onStop里停掉后台任务→ 旋转屏幕只是临时销毁 ViewPresenter 还活着后台操作应等到onPresenterDestroyed再停止。掌握 Component组装工厂、Module依赖配方与 Scope生命周期作用域这三个概念你就能看懂并自由扩展这套 Android Studio MVP 模板生成的全部 Dagger 2 代码了。【免费下载链接】Android-Studio-MVP-templateAndroid MVP template for Android Studio项目地址: https://gitcode.com/gh_mirrors/an/Android-Studio-MVP-template创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考