总结SDK都使用了那些模式
代理模式:在策略哪里使用了,因为这里要记录某些adid的广告的展示次数和时间
拦截器模式:这个可太多了,策略拦截访问,解析数据拦截数据然后收集数据
Builder模式:这个是参数的配置到时候需要这个构造对应的方法,同时使用kotlin的DSL特性去实现
策略模式:重试策略处境频率那么高,怎么忘了他。
工厂模式:使用工厂出产生对应的processor和transfer
0708 肝广告SDK
如果你声明为 internal,它会在相同模块内随处可见
使用类似包访问权限的,在模块内可见,这时候就让大家只能访问到entry就可以了。
今日目标,完成SDK所有类的新增,添加数据转换模块,手动的,这个比较灵活因为全部是自己写的,到时候改起来也快。还能再次完善一下数据解析的架子。
// 使用reified配合inline做数据泛型的反擦除,主要原理是解析的时候有reified的标记会存起来原来的变量,Java其实也可以,不然我的泛型也木得用了,相当于kotlin给我的糖吧。爱吃。
inline fun <reified T : ADData> getData() : T?
0709 肝SDK
今日目标,完成SDK初始化任务,这里主要是收集所有需要的信息,SDK初始化有没有必要像友盟那样,分一个preinit和init,感觉这期不需要这么麻烦,直接干就得了。
学到的东西 今天学习到的冷启动优化知识,还是比较简单的,第一个就是梳理那些被依赖的task,然后分拆,然后又有必须在onCreate执行的task,等把这些分门别类之后,就可以按照对应的task给加到对应list中,实际上,我这里还可以吹牛逼,说用了注解注解那种task在那个线程执行,注解task的优先级等等,注解加上apt,还有就是这个冷启动的初始化线程,完成工作之后就关掉了啊,增加主线程优先级,线程绑到大小核对时间很重要,尽量让他到大的上,冷启动优化的结果就是,高端机0.7-0.5低端机1.9-1.2就是点击icon到Splash window focus的整体时间测量。
还有线程治理,可以使用它的那个方法耗时的asm插桩去完成,这个就是通过这个插桩打印出堆栈和所属线程后发现那些线程没用,成功把线程数由100+降低到50多个
0712 继续SDK
今天SDK已经可以初步使用了,现在有的缺陷就是ADResult里面获取ADData的时候没有使用泛型的那种,这里需要更新。
现在SDK目前是少追踪功能,这些目前看来是具有初步的功效的。
已经增加了更新track已上报信息统计。
0714 广告策略
广告策略有兜底,有内存保存,有磁盘保存,优先使用内存里的数据,策略初始化的时候会去异步的加载策略和从文件里拉取数据,
0715 完善广告
修复昨天发现拉取不下来的问题。
0716 统一广告对外接口
和iOS统一提供的接口,改造一下就可以了。
又多了一项吹牛点
存储管理 这个结合之前在360做的,然后提出怎么管控,例如音视频的接入都有一个上限,从几个维度管理,一个是对应的类型是否达到最大的存储,另一个则是查看系统剩余磁盘多少了,如果自己的删掉了嗨不能满足最低标准,那么就提示用户去删除应用。
0718 SDK借鉴穿山甲
借助穿山甲的那种形式提供接口,可以发现,穿山甲只提供了必要的接口和数据结构,别的都加密了。我主要是学习如何提供接口,有空了可以反编译看看他的源码。 现在首要的是做到神似。
感悟: 关于这个有一点要说,就是我写的时候虽然看了穿山甲的官网接入,但是没有下载他们的代码看,因此导致我的接口设计有些问题,对于广告这种密闭的首先是应该根据类型定义不同的类型,而我仅仅是提供一个方法,这点需要学习借鉴,通过一个接口文件提供有啥好处呢,就是实现类可以随便变而且不暴露更多,而我直接用静态方法则达不到这个效果。不容易修改和扩展,虽然说是对修改封闭,但是直接换一个实现,这个就没啥说的了对吧,这种级别的修改。
0719 将SDK的使用修改为按照穿山甲的形式
将SDK的使用方式改为类似穿山甲的形式。
SDK增加AB测试。
0720 SDK开发以及游客模式
游客模式代码合入以及发版
SDK开发验证
断点上传与下载
断点上传/下载,这是在客户端经常遇到的场景,当我们需要上传或下载一个大文件时,都会考虑使用断点续传的方式。 断点上传相较于断点下载来说,最大的区别就在于断点位置的记录,上传记录在服务端,下载记录在客户端,因此,客户端需要在上传前,通过接口去拿到文件的断点位置,然后在上传时,将文件输入流跳转到断点位置