当前位置:网站首页>实习做了啥
实习做了啥
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
边栏推荐
猜你喜欢
Dolphinscheduler集成Flink任务踩坑记录
Practice using polardb and ECs to build portal websites
冬季实战营 动手实战-初识上云基础,动手实操ECS云服务器新手上路 领鼠标 云小宝 背包 无影
iTOP4412 HDMI显示(4.4.4_r1)
Build an OSS based image sharing website - polite feedback
基于ECS搭建云上博客(体验有礼)
统一任务分发调度执行框架
开篇:双指针仪表盘的识别
Try catch cannot catch asynchronous errors
AVD Pixel_2_API_24 is already running.If that is not the case, delete the files at C:\Users\admi
随机推荐
Typical application scenarios of alicloud log service SLS
VirtualBox如何修改“网络地址转换(NAT)”网络模式下分配给虚拟机的IP网段
Oracle redo log产生量大的查找思路与案例
Problems related to Prometheus cortex using block storage
Tiny4412 HDMI显示
How does thanos configure different data retention durations for different tenants
Memcached source code analysis
Construire un blog Cloud basé sur ECS (bénédiction sur le Code Cloud Xiaobao, explication détaillée de la tâche iphone13 gratuite)
ORACLE环境遇到的ORA-600 [qkacon:FJswrwo]
Cause: dx.jar is missing
mysql和pgsql时间相关操作
oracle存储过程中is和as区别
Abnormal record-10
Abnormal record-16
Dolphinscheduler集成Flink任务踩坑记录
Oracle锁表查询和解锁方法
关于我
Exception record-6
useReducer基本用法
19C RAC修改VIP及SCANIP步骤-同网段