当前位置:网站首页>实习做了啥
实习做了啥
2022-04-23 06:07:00 【独饮敌敌畏丶】
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)在主activity
的oncreate
方法中进行notification
工具类的init
,在ondestroy
方法中进行工具类的销毁(主要是为了销毁manager
,防止内存泄漏)
(3)不管用户在通知栏连接的vpn还是在主页连接的vpn,都会走同一个方法(如果是在通知栏连接vpn,则会使用Eventbus
,走主页连接vpn的方法,所以是同一个方法),则将notification
的ui更新,都放在这同一个方法里面。
(4)如果是非vip用户,每次点击通知栏都会打开app,目的是增加广告展示率
收获
自定义notification
,广播,Eventbus,activity生命周期,属性动画和补间/帧动画的区别
(1)熟悉了自定义notification
,知道有些控件他是不支持自定义的,比如switch
(2)使用自定义notification
进行交互(activity
,service
,broadcastreceiver
之间的配合)。后来把service
去掉了,而且通过Eventbus
减轻了broadcastreceiver
的负担
(3)和项目的对接
这里注意,直接用Eventbus
进行通信即可,无需在广播里面重新写一遍一样的代码。
问题:
①app运行到后台的时候,可以断开,但是无法连接,动画会卡死
②在锁屏状态下,notification
依然显示
③app被用户手动杀死后,notification
依然存在
原因及解决思路:
①
一个是应用在后台的时候,禁止了vpn的连接。在后台禁应该是为了防止谷歌admob以为在恶意刷广告导致封号。
最重要的,就是等不到动画停止的回调。
补间动画和帧动画都存在这种问题,只有属性动画不存在。正常来说,vpn连接成功后,会发送一条消息,这条消息会导致执行连接动画停止的回调。
但是在后台状态下,就是等不到动画停止的回调的执行。后来还怀疑是自定义view
使用动画和Fragment
结合的问题,可能导致view
被detach
了。但是我最终没有弄清楚,看了几十篇博客。最终决定用属性动画来解决这个问题。
②锁屏状态下,可以设置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提前获取了,就过期了之类的。
遇到的问题
5.修复banner以及人机校验的bug,以及修改强制更新的逻辑(到1.14)
①banner的bug主要是新增数据上报,以及新增跳转途径
②人机校验的bug就是:在app使用期间更改了人机校验的方式后,能否及时获取。我这里就是当检测到url发生变化后,会在网络请求失败的回调中重新获取url
③点击“联系客服”后,再弹出人机校验时,一直加载且加载不出来。解决方案。
6.增加ExpandableListView(1.19-过年)
改之前
改之后
收获就是ExpandableListView
的使用,以及和以前ListView
的配合。
load广告的逻辑
有一个接口IAd
,然后有两个抽象类,分别是BaseAdOperator
和BaseAd
,只有BaseAd
实现了IAd
。
每一种广告,都要继承BaseAd
,并且有BaseAdOperator
类型的成员变量。
BaseAdOperator
有唯一实现类,AdOperator
,它是FobAd
的某一成员变量。有两个,分别是mMain
和mSplash
如图
版权声明
本文为[独饮敌敌畏丶]所创,转载请带上原文链接,感谢
https://blog.csdn.net/afdafvdaa/article/details/121332934
边栏推荐
- oracle清除sql的缓存
- Oracle索引状态查询与索引重建
- 阿里矢量库的图标使用教程(在线,下载)
- iTOP4412 SurfaceFlinger(4.0.3_r1)
- Apache SeaTunnel 2.1.0部署及踩坑
- How does VirtualBox modify the IP network segment assigned to the virtual machine in the "network address translation (NAT)" network mode
- oracle视图相关
- Exception record-7
- Explore how @ modelandview can forward data and pages through the source code
- timestamp隐式转换问题导致索引列未使用问题分析
猜你喜欢
oracle表的约束详解
【机器学习】笔记 4、KNN+交叉验证
Using Prom label proxy to implement label based multi tenant reading of Prometheus thanos
BPF program of type XDP
Static interface method calls are not supported at language level ‘5‘ 异常解决
Dolphinscheduler配置Datax踩坑记录
搭建基于OSS的图片分享网站-反馈有礼
Dolphinscheduler集成Flink任务踩坑记录
10g数据库使用大内存主机时不能启动的问题
Redis practice notes and source code analysis
随机推荐
第三篇:docker安装mysql容器(自定义端口)
Exception record-8
Abnormal record-20
实践使用PolarDB和ECS搭建门户网站
Exception record-5
基于ECS搭建云上博客(体验有礼)
mysql和pgsql时间相关操作
解决:You have 18 unapplied migration(s). Your project may not work properly until you apply
10g数据库使用大内存主机时不能启动的问题
Typical application scenarios of alicloud log service SLS
【机器学习】笔记 4、KNN+交叉验证
oracle表的约束详解
oracle用delete删除数据所需时间测试
Explore how @ modelandview can forward data and pages through the source code
pycharm Install packages failed
常用于融合去重的窗口函数row_number
基于ECS搭建云上博客(云小宝码上送祝福,免费抽iphone13任务详解)
中国各省会城市经纬度位置
双指针仪表盘读数(一)
RAC环境中openssh版本对SSH互信创建的影响