Android商业侧开屏动态化技术演进

239 阅读2分钟

背景介绍

为满足开屏控件能动态调整属性,以快速实验出能触发开屏CTR的正向方案。 现阶段,将「开屏点击按钮」、「退出按钮」、「广告标」等常用元素进行动态化配置。

基于该流程,进行了初版设计,主要是为了兼容两种开屏类型

原版设计api调用:

//业务层获得接口,普通开屏传true,超级首映传false

ILaunchDynamic launchDynamic = LaunchDynamicFactory.getLaunchDynamic(true);
//检查数据合法性
launchDynamic.initDefaultValue(advert,fullScreen);
//点击按钮
launchDynamic.clickButtonDynamic(rootView,clickBtn,data);
//广告标
launchDynamic.adTagDynamic(rootView,data,true);
//跳过按钮
launchDynamic.skipButtonDynamic(rootView,skipBtn,data);

未命名绘图7.jpg

设计优点:

1.能兼容到普通开屏与超级首映,最大化复用公共部份

2.业务层只持有 「ILaunchDynamic」接口,符合「依赖倒置」原则

设计缺陷:

1.该业务需要扩展其它动态化控件时,不可必免会侵入到接口类*「ILaunchDynamic」,抽象基类「AbstractLaunchDynamic」,随着业务叠加,不停侵入老业务,抽象基类不可避免的会发生爆炸,不符合「开闭原则」*

基于上述缺陷,进行了符合设计原则的演进:

演进版设计业务层api调用:

点击按钮:

LaunchViewStory.with(rootView)
        .clickBuilder(asset.uiClickButton)
        .injectClickButton(clickLayout)
        .injectClickTextView(clickLayoutText)
        .injectClickArrowView(ivClickIcon)
        .fullScreen(isFullScreen())
        .launch();

跳过按钮

LaunchViewStory.with(rootView)
        .skipBuilder(asset.uiSkipButton)
        .injectSkipButton(skipBtnHotZone)
        .injectSkipTextView(btnSkip)
        .launch();

广告标

LaunchViewStory.with(rootView)
        .tagBuilder(asset.uiAdTag)
        .displayAdvertisingTag(displayAdvertisingTag)
        .launch();

当然,也可以直接链式调用写完,只需要中间隔一个 then() 操作符即可:


LaunchViewStory.with(rootView)
        .clickBuilder(asset.uiClickButton)
        .injectClickButton(clickLayout)
        .injectClickTextView(clickLayoutText)
        .injectClickArrowView(ivClickIcon)
        .fullScreen(isFullScreen())
        .then()
        .skipBuilder(asset.uiSkipButton)
        .injectSkipButton(skipBtnHotZone)
        .injectSkipTextView(btnSkip)
        .then()
        .tagBuilder(asset.uiAdTag)
        .displayAdvertisingTag(displayAdvertisingTag)
        .launch();

演进版设计类图

未命名绘图2.jpg

设计优点:

1.当有新增组件动态化业务时,可以做到完全不侵入已有动态化逻辑,只需要新增相应的 Builder & Worker,注册进FcntionManager即可,符合「开闭原则」,且Builder可以统管各控件之间的位置关系(如果存在位置关系的话)

2.支持业务层链式调用,逻辑更加清晰