其他分享
首页 > 其他分享> > 实习做了啥

实习做了啥

作者:互联网

1.更新升级广告sdk(2021.11.8-2021.12.1)

收获

①接触到了三大广告SDK(广点通,穿山甲,谷歌Admob),熟悉了公司的项目
②思想上的进步:主要是封装的思想,改动的时候只需要改动具体实现类的某一些方法,而外部的那些大的封装方法都不用变。即只改具体实现,上层逻辑不变
③更新公司内部SDK的标准流程(使用本地依赖,github多人协作,项目打包)
而且还发现了公司的一个bug: 无效轮询bug

每1s去轮询,发现没有已经load的Ad,这时没有执行load方法去load广告,也就是进行了无效的轮询。
公司是这样的,第一次会执行一次checkLoad,作用是检查是否有已经load的广告。然后如果没有load的广告,就去load,后面每隔1s就去轮询。也就是等待第一次checkLoad方法load的广告。如果这个广告load成功了,就展示。如果load失败了,就一直等。
正常来讲,load失败,应该再去执行下load方法。

④广告分成了mMain和mSplash,我当时觉得两个广告都是加载的一样的,为啥要区分。后来才明白,这是为了方便运营统计的。

期间学习的其他东西

OKHttp,Retrofit原理,网络缺口学习,组件化入门

2.增加TV端“联系我们”页面

描述

在“TV端”的主页,加一个“联系我们”页面。

收获

入门了TV端,熟悉了TV端代码。
遇到了TV端的通用问题,即焦点问题。我遇到的就是没有加focusable属性,导致当时获取不到焦点。

3.增加自定义Notification(2021.12.9-2021.12.19)

描述

在手机通知栏,添加的快捷控制方式

实现思路

(1)需要广播,自定义notification工具类,以及ui布局
(2)在主activityoncreate方法中进行notification工具类的init,在ondestroy方法中进行工具类的销毁(主要是为了销毁manager,防止内存泄漏)
(3)不管用户在通知栏连接的vpn还是在主页连接的vpn,都会走同一个方法(如果是在通知栏连接vpn,则会使用Eventbus,走主页连接vpn的方法,所以是同一个方法),则将notification的ui更新,都放在这同一个方法里面。
(4)如果是非vip用户,每次点击通知栏都会打开app,目的是增加广告展示率

收获

自定义notification,广播,Eventbus,activity生命周期,属性动画和补间/帧动画的区别
(1)熟悉了自定义notification,知道有些控件他是不支持自定义的,比如switch
(2)使用自定义notification进行交互(activityservicebroadcastreceiver之间的配合)。后来把service去掉了,而且通过Eventbus减轻了broadcastreceiver的负担
(3)和项目的对接
这里注意,直接用Eventbus进行通信即可,无需在广播里面重新写一遍一样的代码。
问题
①app运行到后台的时候,可以断开,但是无法连接,动画会卡死
②在锁屏状态下,notification依然显示
③app被用户手动杀死后,notification依然存在
原因及解决思路

一个是应用在后台的时候,禁止了vpn的连接。在后台禁应该是为了防止谷歌admob以为在恶意刷广告导致封号。
最重要的,就是等不到动画停止的回调。
补间动画和帧动画都存在这种问题,只有属性动画不存在。正常来说,vpn连接成功后,会发送一条消息,这条消息会导致执行连接动画停止的回调。
但是在后台状态下,就是等不到动画停止的回调的执行。后来还怀疑是自定义view使用动画和Fragment结合的问题,可能导致viewdetach了。但是我最终没有弄清楚,看了几十篇博客。最终决定用属性动画来解决这个问题。
②锁屏状态下,可以设置VISIBILITY,控制notification不显示。即mBuilder.setVisibility(NotificationCompat.VISIBILITY_SECRET);
③这只在小部分手机存在。用户杀死app属于异常情况,不会走onDestroy方法。所以不能删除notification
我找了很多资料,发现只能用Service来配合。但是因为app此前没有用过相关Service,尽量不去弄新的Service,所以就无法解决。在这期间,我还学习了深杀和浅杀,以及调用的方法onTaskRemoved。具体在这篇文章
(4)代码差距
1.规范性问题,比如各种判空。还有工具类封装的规范,比如变量先在类里面声明。我写的就是前头不顾后头,一点不规范,平时就没注意这些
2.角度问题。写代码要站在全局的角度,我的就是太局部了。其实也是对项目不熟悉。比如一些上下文可以直接获取。
3.技术问题。没在onDestroy里面进行销毁,onDestroy不一定会执行。写ui的时候少用weight,还有可以用一个布局,表示多种状态(通过设置visibility

4.实现人机校验接口和Banner接口(2021.12.20-2021.12.24)

描述

添加人机校验功能和动态获取Banner

收获

webview基本使用
webview和js进行交互(安卓调用js代码,js代码回调安卓方法)
③注意实体类的混淆规则
如果是普通的实体类就直接implements NoProguard
实体类如果是请求的响应体就继承RspBase,RspBase里面有返回的成功和失败代码
④要注意模仿项目原先的编写思路。
比如回调要在调用的方法中实现,并且当作参数传走。
还有接收model,可以写的灵活一点。接收的类型如果是键值对,不一定非得是HashMap,也可以是自己定义一个类去接收。
接收的model也可以作为类型,放到别的类中作为一个对象,去存储数据。
⑤在网络获取成功的回调中写相关代码!!!一定要注意判空处理

人机校验思路

每次进入账户页面,会动态获取人机校验h5的url,然后存起来。
每次点击登录或注册按钮的时候,会先弹出人机验证框dialog。此框里面就有webview控件,加载的是人机校验h5的url。当人机校验成功的时候,网页会回调安卓的方法,传入一个值。同时安卓这边立马进行短信验证。当输入完短信验证码,点击登录或注册的时候,就会把刚刚网页传入的值带进去一块传走。证明用户已通过人机校验。
如果h5的url获取失败,那就不进行人机校验,也就无法获得网页传给安卓的值,也就无法登录或者注册。
至于h5的url的时延问题,因为人机校验成功了之后,紧接着就收到了网页传给安卓的值,是一气呵成的。所以url和网页传给安卓的值是相互匹配的,不会因为h5的url提前获取了,就过期了之类的。

遇到的问题

webview一片空白

5.修复banner以及人机校验的bug,以及修改强制更新的逻辑(到1.14)

①banner的bug主要是新增数据上报,以及新增跳转途径
②人机校验的bug就是:在app使用期间更改了人机校验的方式后,能否及时获取。我这里就是当检测到url发生变化后,会在网络请求失败的回调中重新获取url
③点击“联系客服”后,再弹出人机校验时,一直加载且加载不出来。解决方案。

6.增加ExpandableListView(1.19-过年)

改之前
在这里插入图片描述

改之后
在这里插入图片描述
收获就是ExpandableListView的使用,以及和以前ListView的配合。

load广告的逻辑

有一个接口IAd,然后有两个抽象类,分别是BaseAdOperatorBaseAd,只有BaseAd实现了IAd
每一种广告,都要继承BaseAd,并且有BaseAdOperator类型的成员变量。
BaseAdOperator有唯一实现类,AdOperator,它是FobAd的某一成员变量。有两个,分别是mMainmSplash
如图
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

标签:load,动画,notification,校验,广告,人机,实习
来源: https://blog.csdn.net/afdafvdaa/article/details/121332934