如何实现 DaggerService

2023-11-26

我已经了解了基础知识以及课程,但是对于 dagger(甚至 dagger 2)来说是新手,我不知道应该如何使用它

这是 dagger 意图服务:https://google.github.io/dagger/api/latest/dagger/android/DaggerIntentService.html

我了解 android 意图服务和实现的基础知识,但我似乎无法找到有关 DaggerIntentService 的信息(而且我也很难找到 DaggerService 的信息)

我的目标是使用 TDD 构建它,但我实际上只需要了解实现基于 dagger 的服务的工作流程

谢谢, 凯莉


这不回答DaggerIntentService问题,故意的。dagger.android包或多或少地执行与您可以通过为 Intent 服务设置相关组件和模块手动执行的相同操作。所以你可以尝试以下方法:

ServiceComponent

@Subcomponent(modules = ServiceModule.class)
public interface ServiceComponent{

    @Subcomponent.Builder
    public interface Builder {
        Builder withServiceModule(ServiceModule serviceModule);
        ServiceComponent build();
    }

    void inject(MyService myService);
}

ServiceModule

@Module
public class ServiceModule{

    private MyService myService;

    public ServiceModule(MyService myService){
        this.myService = myService;
    }

    @Provides public MyService provideServiceContext(){
        return myService;
    }

    @Provides public SomeRepository provideSomeRepository(){
        return new SomeRepository();
    }
}

例如,请记住您有根匕首组件ApplicationComponent您在应用程序中实例化的onCreate()方法,您将需要在应用程序类中添加一个额外的公共方法。

ApplicationComponent

@Component(modules = ApplicationModule.class)
public interface ApplicationComponent{
    ServiceComponent.Builder serviceBuilder();
}

ApplicationModule

@Module(subcomponents = ServiceComponent.class)
public class ApplicationModule{

    public ApplicationModule(MyApplication myApplication){
        this.myApplication = myApplication;
    }

    @Provides
    public MyApplication providesMyApplication(){
        return myApplication;
    }
}

MyApplication

public class MyApplication extends Application{

    ApplicationComponent applicationComponent;

    @Override
    public void onCreate(){
        super.onCreate();
        applicationComponent = DaggerApplicationComponent.builder()
            .applicationModule(new ApplicationModule(this))
            .build();
    }

    public ServiceComponent getServiceInjector(MyService myService){
        return applicationComponent.serviceBuilder().withServiceModule(new ServiceModule(myService)).build();
}

最后,你的MyService :)

MyService

public class MyService extends IntentService{

    @Inject MyApplication application;
    @Inject SomeRepository someRepository;

    public onCreate(){
        ((MyApplication)getApplicationContext()).getServiceInjector(this).inject();
    }

    public void onHandleIntent(Intent intent){
        //todo extract your data here
    }

一开始它可能看起来很复杂,但如果您已经设置了匕首结构,那么它只需要两到三个额外的类。

希望您觉得它有帮助。 干杯。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何实现 DaggerService 的相关文章

  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • 类型容器“Android 依赖项”引用不存在的库 android-support-v7-appcompat/bin/android-support-v7-appcompat.jar

    我在尝试在我的项目中使用 Action Bar Compat 支持库时遇到了某种错误 我不知道出了什么问题 因为我已按照此链接中的说明进行操作 gt http developer android com tools support libr
  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • Android - 从资产中解析巨大(超大)JSON 文件的最佳方法

    我正在尝试从资产文件夹中解析一些巨大的 JSON 文件 我如何加载并添加到 RecyclerView 我想知道解析这种大文件 大约 6MB 的最佳方法是什么 以及您是否知道可以帮助我处理此文件的良好 API 我建议您使用GSON lib h
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • Android 30+ 中的视频捕获意图 - 只有所有者才能与待处理项目交互

    我正在尝试在我的应用程序上捕获视频 它可以在 android API 30 以下运行 但不能在 30 以上运行 似乎在 sdk 30 之后 android 不允许完全读取外部存储 作用域存储 我目前遇到这个错误 java lang Ille
  • android xamarin 中的 reCaptcha

    我想在 Xamarin android 应用程序中实现验证码 我抓住了这个在 Android 中集成 googles reCaptcha 验证 https www c sharpcorner com article how to integ
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 获取当前 android.intent.category.LAUNCHER 活动的实例

    我创建了一个库项目 并在多个应用程序之间共享 我实现了一个简单的会话过期功能 该功能将在一段时间后将用户踢回到登录屏幕 登录屏幕活动是我的主要活动 因此在清单中它看起来像这样
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • 如何默认在 ActionOpenDocument 意图中显示“内部存储”选项

    我需要用户选择一个自定义文件类型的文件 并将其从 Windows 文件资源管理器拖到 Android 设备上 但默认情况下内部存储选项不可用 当我使用以下命令启动意图时 var libraryIntent new Intent Intent
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • Android:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 如果 getc() 通过 SIGINT 退出,则 getc() 后面的未定义行为是否会改变程序行为

    根据 未定义行为 的现代解释 编译器有权假设不会发生导致未定义行为 不可避免 的事件链 并且可以消除仅适用于代码将要执行的情况的代码未定义的行为 这可能会导致未定义行为的影响及时倒退 并使本来可以观察到的行为无效 另一方面 如果除非程序终止
  • 使用 Windows 身份验证的 Intranet 应用程序是否需要 ASP.NET Core Identity

    在 Intranet Web 应用程序中使用 Windows 身份验证我想实现以下目标 从 AD 收集其他属性 姓名 员工编号 从数据库表中收集其他属性 工作时间 工资 根据应用程序角色 而不是 AD 组 进行授权 基于 AD 属性授权 有
  • Draw.io——是否有未缩小的源代码?

    我们正在尝试使用最新的 Draw io 存储库 并修改 javascript 客户端代码以更改其某些行为以改进用户体验 但是 我们能找到的唯一最新来源是这里 https github com jgraph draw io tree mast
  • fstream 读/写是否移动文件指针

    这是一个我希望能够轻松回答的简单问题 文件流读写操作是否会移动指针 举个例子 cpos 10000 for i 0 i lt 20 i dataFile seekg cpos i ios beg dataFile read carray i
  • 何时使用虚拟析构函数?

    我对大多数都有深入的了解OOP理论 但让我很困惑的一件事是虚拟析构函数 我认为无论如何 对于链中的每个对象 析构函数总是被调用 您打算什么时候将它们虚拟化 为什么 当您可能通过指向基类的指针删除派生类的实例时 虚拟析构函数非常有用 clas
  • ggvis 中带有数字的热图

    我正在尝试使用 ggvis 中 ggplot2 中的数字复制热图 ggplot2版本是 library ggplot2 hec lt as data frame xtabs Freq Hair Eye HairEyeColor ggplot
  • 将第三方js文件导入到Angular TypeScript项目中

    在我使用 Angular 的经历中 我被迫使用四种不同的方式来包含第 3 方库poliglot js 对于多语言 所以能够使用new Polyglot 在我的朗课上 export class Lang constructor this po
  • iPhone/iPad 上的 PDF 超链接

    我一直在浏览谷歌和SO 但还没有找到我的问题的答案 或者至少没有找到更新的答案 我有一个包含超链接 热点的 PDF 并且想在我自己的 iPhone iPad 应用程序中显示该 PDF 文件 当用户单击超链接 热点时 我希望将用户带到链接的适
  • JPA ManyToMany,JoinTable怎么会有属性?

    我有一个关于EJB中ManyToMany设计的问题 jointable如何拥有属性 举个例子 学生和课程都是ManyToMany 每个学生有很多门课程 很多学生选择一门课程 Entity public class Student imple
  • 聚焦时更改 mat-select-arrow 和 mat-select-underline

    到目前为止 我已经尝试了很多不同的事情 例如 deep mat select focus mat select trigger mat select arrow color 63961C deep mat select focus mat
  • 平滑这个 jQuery 切换动画吗?

    所制作的动画我的 jQuery 函数不稳定 我一直在寻找不同的 SO 解决方案 例如添加 jquery easing 但没有运气 问题是每个 div 中的 iframe 吗 关于如何平滑动画有什么想法吗 我的基本切换功能是最好的方法吗 JS
  • Codeigniter 4 - 如何显示404页面?

    这是一个非常愚蠢的问题 但我无法处理它 在 Codeigniter 3 中 我只是在任何控制器中使用 show 404 函数来显示 404 页面 我怎样才能用 Codeigniter 4 做同样的事情 我刚才正在寻找同样的东西 我在这里找到
  • Angular 2. 如何在 Observable 中使用重定向处理 4xx 错误?

    我有一个调用 api 的服务 getItems itemId number Observable
  • 在实体框架 6 中调用标量值函数

    如何在实体框架 6 中调用标量函数 我尝试过以下代码 using MhEntities DContext new MhEntities var Account IdParameter Account Id HasValue new Obje
  • PHP 取消链接不起作用

    我正在尝试使用 unlink 删除 php 中的照片 我之前在其他服务器上使用过它 但这次它不起作用 我已经使用绝对路径进行测试 但仍然不起作用 我把它用作 取消链接 img1 jpg and unlink http www mysite
  • Django ORM 在注释多个聚合列时删除不需要的 Group by

    我想在 django ORM 中创建一个类似这样的查询 SELECT COUNT CASE WHEN myCondition THEN 1 ELSE NULL end as numyear FROM myTable 以下是我编写的 djan
  • Rails 设计,没有路线匹配注销

    尽管有很多类似的问题 但我已经搜索了几个小时但仍然无法解决它 环境 导轨3 0 9 红宝石 1 9 2 设计1 4 2 我使用以下方法更改了默认登录网址 5 resources users 6 devise for users path g
  • 如何在VS2015中构建OpenSSL:x86cpuid.asm是一个空文件

    我需要为使用 VS2015 32 位 的项目构建 OpenSSL 我找到的说明是http developer covenanteyes com building openssl for visual studio 据报道 更新 编辑版本使用
  • 如何在 SwiftUI 中将苹果 ColorPicker 的布局从圆形更改为方形?

    ColorPicker默认的按钮样式是圆形 如下所示 我想将圆形按钮的样式更改为矩形 但似乎没有 API 可以改变它的风格 所以我在它上面放了一个矩形 并将它的 allowedHitTesting 设置为 false 以将单击事件传输到 C
  • 如何实现 DaggerService

    我已经了解了基础知识以及课程 但是对于 dagger 甚至 dagger 2 来说是新手 我不知道应该如何使用它 这是 dagger 意图服务 https google github io dagger api latest dagger