首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Dagger Android支持库(译文)

使用Dagger编写Android应用程序的一个主要困难是,许多Android框架类都由操作系统本身实例化,如Activity和Fragment,但如果Dagger可以创建所有注入的对象,则效果最佳。...subcomponent 和他的 builder 没有其他方法或者超类型,而不是步骤2中提到的方法或超类型,则可以使用 @ContributesAndroidInjector 为您生成它们。...所有每个子类需要做的是绑定相应的 @Subcomponent。 如果您没有复杂的类层次结构,Dagger提供了一些基本类型,例如DaggerActivity和 DaggerFragment。...Dagger 还为同一目的提供了 DaggerApplication - 您需要做的就是扩展它并覆盖applicationInjector()方法以返回应该注入 Application 的组件。...如果您肯定您的 AndroidInjector.Factory 没有为注入的对象保留实例,则可以通过将 @SuppressWarnings(“dagger.android.ScopedInjectoryFactory

97830

android学习笔记----Fragment

savedInstanceState 参数是在恢复Fragment时,提供上一个Fragment实例相关数据的 Bundle。...如需了解有关保存状态的详细信息,请参阅 Activity 文档) inflate() 方法带有三个参数: 1.您想要扩展的布局的资源 ID; 2.将作为扩展布局父项的 ViewGroup。...传递 container 对系统向扩展布局的根视图(由其所属的父视图指定)应用布局参数具有重要意义; 3.指示是否应该在扩展期间将扩展布局附加至 ViewGroup(第二个参数)的布尔值。...因为系统的Activity只能用来盛装系统自带的Fragment,而无法盛装V4包中的Fragment,因为系统的Activity根本无法识别V4包中的Fragment,因为这根本就不是一块的代码!...又比如在Fragment中嵌套Fragment,这个功能是在api 17(android 4.2)才开始支持的,如果使用的是内置的Fragment,那么4.2之前的系统设备运行就会崩溃,说是不支持的方法

65111
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android 组件化 —— 路由设计最佳实践

    AndroidMainfest集中式管理比较臃肿 无法动态修改路由,如果页面出错,无法动态降级 无法动态拦截跳转,譬如未登录的情况下,打开登录页面,登录成功后接着打开刚才想打开的页面 H5、Android...路由定义 我这边是完全按照URL规范了,这里要说一下,现在好多方法是把参数定义在path里面的,虽然这样做,有不需要额外传参数的好处,但是这样路由就没有那么灵活,调试起来就没有那么方便了。...,但是AndroidManifest配置还是比较不方便的 我现在还是采用了注解,后面我会结合两种方法,将注解自动修改AndroidManifest,对于接入方是没有变动的,方法已经找到了,用自定义Lint...做一个像Swagger的平台,支持一键导出所有路由、二维码打开路由 注解修改AndroidManifest,不再需要路由表 支持路由方法接收器,Url直接打开某个方法,不再局限Activity已实现 如果大家有意见...是如何产生的 LauncherFrom 提供了一种hook activitythread找到launchedFromPackage的方法,不过也只支持5.0以上 高效过滤Intents 只有包含特定Package

    1.7K30

    Effective-java-读书笔记之枚举和注解

    枚举天生不可变, 因此所有的域都是final的.有时候需要将不同的行为与每个常量关联起来, 可以在枚举中定义抽象方法, 这样添加新的常量的时候就必须提供这个方法.如果多个枚举常量同时共享相同的行为, 则考虑策略枚举...(无法打印, 无法遍历.)java.util提供了EnumSet类来有效地表示从单个枚举类型中提取的多个值的多个集合.第37条 用EnumMap代替序数索引有时候, 你可能会见到用ordinal方法来索引数组的代码...只要实现这个接口就可以.虽然无法编写可扩展的枚举类型, 却可以通过编写接口以及实现该接口的基础枚举类型, 对它进行模拟....没有加@Override注解的时候, 编译器不会报错, 而是把它当做一次方法重载.加上@Override注解, 编译器会提示, 可以及时发现错误.应该在你想要覆盖超类声明的每个方法声明中使用@Override...注解.如果不写IDE会有警告.如果是实现抽象方法, 不写@Override注解IDE不会警告, 但是这样做没什么坏处.第41条 用标记接口定义类型标记接口(marker interface)是没有包含方法声明的接口

    56350

    阿里ARouter使用及源码解析(一)

    隐式intent的实现方式,则会出现规则集中式管理,导致协作变得困难; 可配置性较差,一般而言配置规则都是在Manifest中的,这就导致了扩展性较差; 跳转过程无法控制,一旦使用了StartActivity...,如果集合为空,则创建一个新的组,将该节点添加进去,并将组集合保存在groupmap中; //不为空,则添加到所属的组集合中去 Set...@Route注解中有设置group标识,作为groupname,如果没有就取/xxx1/xxx2,xxx1作为groupname,并将同一组的路由节点放到同一个集合中去。...其实build()方法的目的只有一个就是根据路由,封装成Postcard对象,其对象贯穿之后整个路由过程。Postcard 包含了众多的属性值,提供了路由过程中所有的控制变量。...PROVIDER节点类型,从服务节点列表中获取,如果没有,则实例化,并保存在服务节点列表Warehouse.providers中 //并将实例化的对象设置给postcard

    1.3K20

    【Android 组件化】使用 ARoute 实现组件化 ( ARoute 初始化 及 界面跳转 源码分析 )

    LogisticsCenter.init(mContext, executor); 是核心的逻辑 , 在该方法中 , 加载了路由表 , 路由表类是 注解处理器 在编译时生成的类 , 生成的目录是 " D...Class 类对象 , 通过之前 ARoute 初始化到内存的路由表补充跳卡中的数据 ; 然后判断该跳转是否是绿色通道 , 如果是继续执行跳转 ; 如果不是 , 则触发拦截器 , 拦截器判定未通过 ,...则中断跳转 , 拦截器判定通过 , 则继续执行跳转 ; 这里的拦截器一般用于权限鉴定 , 比如用户是否购买会员 , 是否购买服务 , 是否拥有权限等等 ; 拦截器的详细用法自行去 GitHub 上查看...Warehouse 对应的静态成员中 , 这里直接从该静态成员中获取 路由 数据 ; 如果从 Warehouse 中获取 路由信息 失败 , 说明路由表还没有加载 , 那么先加载路由表 , 路由表加载成功后...postcard.getPath()); if (null == routeMeta) { // Maybe its does't exist, or didn't load. // 如果路由表还没有加载

    1.1K20

    Dubbo源码篇05---SPI神秘的面纱---使用篇

    //依次判断当前第三方实现类全类名是否已经存在于providers集合中,如果存在则跳过 //如果不存在,则加入providers集合中...Dubbo 的扩展能力并不仅仅只是发现扩展服务实现类,而是在此基础上更进一步,如果该扩展类的属性依赖其他对象,则 Dubbo 会自动的完成该依赖对象的注入功能。...", "spring"); //如果url中没有获取到key=frame.work的键值对,并且SPI注解中没有指定默认值,那么会抛出异常 if (string == null...如果后期对于某个扩展接口,我们不想使用dubbo为我们提供的默认URL动态匹配逻辑了,而是想要自定义动态匹配规则,也就是说我们想要指定一个实现类作为自适应扩展点,这时候我们可以将@Adaptive注解加在某个实现类上...例如下面这段代码表示如果当前为所处环境为PROVIDER服务提供方,则激活当前扩展实现类: @Activate(group = CommonConstants.PROVIDER) public class

    40021

    Spring注解缓存设计原理及实战

    true,则在方法还没有执行的时候就清空缓存,默认情况下,如果方法执行抛出异常,则不会清空缓存 可扩展 Spring注解能满足一般应用对缓存的需求,但随着应用服务的复杂化,大并发高可用性能要求下,需要进行一定的扩展...先不考虑如何持久化缓存,毕竟这种三方实现很多,要考虑的是,怎么利用Spring提供的扩展点实现我们自己的缓存,且在不改原来已有代码的情况下进行扩展,是否在方法执行前就清空,默认为false,如果指定为true...,则在方法还没有执行的时候就清空缓存,默认情况下,如果方法执行抛出异常,则不会清空缓存。...自定义注解缓存 注解缓存的使用,可有效增强代码可读性,同时统一管理缓存,提供较好的可扩展性。 为此,酒店商家端在Spring注解缓存基础上,自定义了适合自身业务特性的注解缓存。...非public方法无法使用注解缓存实现。

    35610

    使用 @ExtensionMethod 注解简化从 Map<String, Object> 中获取 Integer 和 Long 类型的值

    什么是 @ExtensionMethod 注解? @ExtensionMethod 是 Lombok 提供的一个注解,它允许我们为现有的类添加扩展方法。...通过使用这个注解,我们可以在不修改原类的情况下,为其添加新的方法。这样可以使我们的代码更加简洁,并提高可读性和可维护性。...// 如果没有对应的转换逻辑,返回 Optional.empty() return Optional.empty(); } /** * 将对象转换为 Long...@ExtensionMethod 注解,我们可以为现有类添加扩展方法,从而简化代码并提高可读性。...在本文中,我们创建了一个实用的工具类 MyMapUtils,并使用 @ExtensionMethod 将其方法作为 Map 的扩展方法使用,使得从 Map 中获取特定类型的值变得更加简单和直观

    8400

    CodeWave系列:6.CodeWave 智能开发平台 扩展依赖库开发

    对于基础信息的收集会读取工程根路径中的pom.xml,如果为父子工程,则对子工程的打包会读取子工程下的pom.xml文件。...pom.xml配置示例: 标题通过解析pom.xml中的name标签来生成,此标签为可选项,如果未声明name标签,则默认为artifactId标签对应的值。...pom.xml配置示例: 描述是通过解析pom.xml中的description标签来生成,此标签为可选项,如果未声明description标签,则默认扩展依赖库描述为空字符串。...成员变量需要有对应的get和Set方法。 类中如果提供了有参构造函数,则必须显式提供无参构造函数。 数据结构必须有成员变量,否则无意义。...3.3.3 声明为Configuration(自定义参数配置) 在类的成员变量上添加@NaslConfiguration注解即声明为Configuration,可以设置参数在不同环境下的默认值,如果未指定的话则默认为空字符串

    19810

    框架分析(11)-测试框架

    它提供了一组注解和断言方法,以及一个执行测试的运行器。 框架主要特性 注解支持 JUnit使用注解来标记测试方法和测试类。...异常测试支持 JUnit允许测试方法标记为期望抛出特定异常。如果测试方法确实抛出了期望的异常,则测试将被视为通过。如果测试方法没有抛出异常或者抛出了其他异常,则测试将被视为失败。...可以使用@RunWith和@Suite注解来创建测试套件。 超时测试 JUnit允许设置测试方法的超时时间,如果测试方法执行时间超过指定的时间,则测试将被视为失败。...优缺点分析 优点 简单易用 JUnit框架提供了简单易用的API和注解,使得编写和运行单元测试变得非常简单。...总结 JUnit框架提供了一套强大的工具和功能,使得编写和运行单元测试变得更加简单和高效。它的特性包括注解支持、断言方法、异常测试支持、参数化测试、测试套件、超时测试、前置条件和扩展模型等。

    24020

    Spring核心面试题汇总

    PropertyEditor用于将字符串转换为其他类型的对象,而Converter则提供了更通用的类型转换方法。...而ApplicationContext接口则扩展了BeanFactory,提供了更多企业级的功能,如事件发布、资源加载等。 7. Spring中的循环依赖是如何解决的?...如果没有三级缓存来存储工厂对象,Spring就无法在Bean创建的中途暂停,去处理依赖的另一个Bean。这会导致循环依赖问题无法解决,因为每个Bean都在等待另一个Bean完成初始化。...@Transactional注解还支持多种事务传播行为,如REQUIRED(如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务)、REQUIRES_NEW(创建一个新的事务,并暂停当前事务...请解释Spring中的@Async注解的工作原理,并说明其异步执行机制。 答案要点: @Async注解是Spring框架提供的一个用于声明异步方法的注解。

    8310

    确认过眼神,这就是你要的路由库

    一、功能特性 通过url打开Activity,实现界面间解耦; 通过服务实现方法调用,实现Module间方法调用解耦; 通过拦截器实现界面跳转的处理:条件拦截、埋点统计等; 界面、服务、拦截器均支持多Module..."}); 在任意需要路由打开的Activity加上注解@DisPatcher,里面写上其对应的url; @DisPatcher({"easyrouter://main", "easyrouter...2、Module间通信(方法调用) 配置稍微复杂,但使用极其简单;可参考modulelib中的BaseModuleService。...) 各Module需要向外提供的方法在BaseModuleService中新建接口类并暴露接口; public interface ModuleInteractService extends BaseModuleService....runModuleInteract(context); 备注:配置复杂带来的优势是方法的直接调用,无需强转也不限定调用方法的方法签名; 3、拦截器 实现IInterceptor接口; 打上注解@Interceptor

    79540

    dubbo(一)SPI机制与实现路径

    二、JDK标准的-SPI 在面向对象中,模块之间都是基于接口的,模块之间如果其中一个模块或接口实现需要进行更改,则就需要修改代码。...(2)getAdaptiveExtension获取扩展装饰类对象 被@Adaptive注解修饰的类就是扩展装饰类,点开注解后我们可以看到,@Adaptive注解只能修饰类和方法。...如果实现类类中包含了activate注解修饰的类,则会把实现类放到cachedActivates中。 剩余其他的类,则放在cachedNames中。 private Class的方法,只有方法被@Adaptive修饰的方法才会实现。没有被修饰的方法则无法实现。...@Adaptive注解总结 官方文档中解释为:Adaptive可注解在类或方法上。当注解在类上时,dubbo不会为该类生成代理类,表示扩展的加载逻辑由人工编码完成。

    91020

    8条枚举与注解技巧,提升代码质量与设计美学

    ,考虑使用EnumMap使用接口扩展枚举如果想像添加新类那样扩展枚举值,枚举虽然无法实现,但可以通过接口来进行扩展使用接口定义抽象方法由枚举类型实现//计算public interface Operation...> testClass = Sample.class; for (Method m : testClass.getDeclaredMethods()) { //方法有注解则进行处理...()Passed: 1, Failed: 3不要使用约定的命名模式标记代码,而是使用注解处理更靠谱坚持使用Override注解@Override 注解用于覆写父类方法或抽象方法如果想要对方法进行覆写(重写...Override注解善用标记接口标记接口指的是没有抽象方法,只用于定义类型的接口,如:序列化 Serializable、克隆 Cloneable、随机访问 RandomAccess标记接口只能由接口继承或类实现...(Object) 并没有使用标记接口的好处如果申明参数为Serializable,传入参数未实现序列化接口则可以在编译期间就提前暴露问题总结枚举类继承抽象类Enum,用于定义常量,可由多个字段组成,并提供

    8621

    连Action Bar都不会 你能说你学过 Android?

    ---- 零、前言 Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。...在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为action bar能够使应用程序给用户提供一致的界面,并且系统能够很好根据不同的屏幕配置来适应操作栏的外观...always ,则默认显示; 如果是 ifRoom,Action Bar上有空则显示; 如果是 never,则默认隐藏到三个点区域里面; 显示效果如下图: 隐藏Item,点击三个点图标后,可以显示,...; android:icon是没被隐藏时显示的图标 如果只有android:title,但没有android:icon,被强制显示,Action Bar会显示文字,如下图所示: 如果只有android...(ActionBar.Tab tab, FragmentTransaction ft) { //判断碎片是否初始化 if (fragment == null) { //如果没有初始化

    33220

    一线互联网架构师用一文带你彻底吃透Hystrix源码,不服真不行

    本文给大家介绍的内容是Hystrix源码解析; Hystrix源码解析 @HystrixCommand注解是由名为javanica的Hystrix contrib库提供的。...注解的拦截和处理。...工厂新建一个熔断器,源码如下: HystrixCircuitBreaker.Factory类根据CommandKey对熔断器进行了缓存,如果缓存里存在Key,则直接取缓存里的Key,如果不存在,则新建...下面是主要的代码实现: 微服务架构的关键技术是为微服务提供高可用、可扩展性、可容错性的平台基础设施。...Spring Cloud作为微服务的治理平台为我们提供了相关的技术和服务组件,而开源的解决方案往往无法做到满足个性需求,我们需要根据实际场景和业务特性做定制化开发。

    36210

    【Dubbo源码】SPI机制源码解析

    ,(加载的具体详情请看下面) 如果扩展类中有带有注解@Adaptive,说明是自适应扩展类,直接返回 一个type有且只有一个自适应扩展类 如果当前type中所有的扩展类中没有找到带有注解@Adaptive...,则dubbo会自动生成一个; 先拼接类 查询当前type的所有方法中是否有注解@Adaptive(是方法中的注解),如果一个都没有的话,那么就会抛出异常; 遍历每一个method,如果方法中没有注解...cachedClasses的key是左边值,value是右边对应的Class 如果还没有加载过,则开始加载 如果当前的type上的@SPI有默认值,例如@SPI("dubbo"),则将其设置到属性cachedDefaultName...type的实现类 如果扩展类中带有注解@Adaptive则表示这个是自适应扩展类;并且缓存到属性cachedAdaptiveClass中;如果文件中的扩展类有多个@Adaptive,则会抛异常,最多只有一个自适应扩展类...如果不是自适应扩展类也不是包装类,并且扩展类带有注解@Activate,则放入map属性cachedActivates中;key是name, value是注解Activate loader.getExtension

    1.5K50

    Android组件化专题-路由动态注入跳转参数以及获取其他模块的fragment

    最为一名有梦想的码农,我理想中的写法: 在相应的Activity,通过一个注解就可以拿到跳转传递过来的参数的值,然后直接使用。...其实很简单,我们通过注解拿到父类Activity,然后注解变量的类型和名称,然后我们动态生成一个类,通过原生的方式来实现参数获取。...其实跟上几篇的文章是一样的原理,这里就不再多复述了这是链接组件化专题 下面就直接一堆代码,抛给你 首先声明注解 @Target(ElementType.FIELD) @Retention(RetentionPolicy.CLASS...生成函数体 TypeMirror typeMirror = element.asType();//获取注解节点的类型 //获取TypeKind 枚举类型的序列号...; } //检查是否配置group如果没有配置 则从path中截取组名 checkRouterGroup(routerMeta)

    2K20
    领券