-
posts
-
Android Studio快捷键提示工具
-
抢购倒计时
-
使用Database Inspector调试数据库
-
Charles模拟若网环境
-
深入理解Java|Kotlin泛型
-
Android transitionName共享元素
-
Charles打断点(Breakpoints)
-
Charles重定向本地json文件调试
-
KotlinKnife异常java.lang.IllegalStateException ID not found
-
深入学习Kotlin协程(一)-协程是什么?
-
Kotlin之const val、val以及@JvmField修饰字段
-
android.os.TransactionTooLargeException异常记录
-
ViewPager2嵌套RecyclerView滑动冲突解决办法
-
Kotlin样式
-
Android理解自定义View
-
Ubuntu 18.04中安装Wine QQ时不显示图片解决办法
-
一次android.enableD8.desugaring = false引发的血案
-
使用阿里云仓库服务提升Gradle Sync速度
-
Android面试整理
-
自动化打包并发送邮件给测试人员
-
快速打包方式处理
-
寺库android客户端编码约定
-
一键自动化打包
-
Linux便携配置指南
-
使用限定数量的List FixedSizeList
-
Bash Commands Guide
-
Checkstyle代码风格分析工具
-
chmod命令修改文件读写权限
-
com.android.tools.r8.errors.CompilationError: Program type already present gradle编译异常的解决办法
-
Detekt使用命令生成检测日志
-
git bisect二分查找
-
Glide如何优化内存消耗
-
Google为什么决定使用DataStore而放弃SharedPreferences
-
Handler与Activity,Fragment生命周期解绑,解决延迟执行崩溃问题
-
IDE禁止 star import
-
JsBridge简单流程
-
Java集合fail fast 和 fail safe
-
Kotlin的那些细节-基础函数和变量
-
Kotlin的那些细节系列—基础之类、属性、迭代、异常
-
Kotlin集合常用函数式操作
-
Lint使用的一些思考
-
Lint精简版
-
Gitlab merge request标签初步约定
-
Rxjava Observable转LiveData
-
优先使用原则
-
使用Dokka为你的Kotlin代码生成KDoc
-
使用Preferences DataStore存储数据
-
使用WildcardParameterReplacer 实现 query 公共参数替换
-
倒计时逻辑组件实现
-
寺库Android数据智能上报
特点
--> -
崩溃线程数据收集
-
打包记录
-
数据上报机制
实时上报机制
先举一个例子
- 将埋点数据比作乘客
- 将数据平台比作目的地
- 而App的上报请求就是客车
- App则是负责发车的调度这
当调度者(App) 发现有一个乘客(埋点数据)时,就安排这个乘客上车,然后开始计时
- a.如果超过5分钟(举例需要),没有新的乘客乘车,就立即发车,被送达到目的地
- b.如果5分钟内,有新的乘客过来,就重新计时,按照a,b情况去匹配操作
- c.特殊情况,如果发车时,乘客过多,调度者会安排多辆客车立即发车(不再走a,b情况处理)。
调度者通过反复上面的操作,就会将乘客源源不断地送达到目的地
分批切块逻辑
- 为了规避大量数量(洪水般)数据单次上报带来的问题,我们队数据进行分批切块处理
- 分批切块处理后的每块的数据顺序保持原数据的顺序,比如
[1,2,3,4,5,6,7,8,9,10]
以3为一块的容量,可以分为[1,2,3]
,[4,5,6]
,[7,8,9]
,[10]
失败处理
- 无网络时收集的请求会写入文件
- 请求失败的数据会写入文件
- 当
网络请求恢复
和用户进入前台
和应用启动
时会上报失败的数据 - 具体实现的数据持久化处理,可以参考AsyncDataPersister
线程策略
- 关于执行线程并没有严格的限制
- 考虑到App的稳定性,我们结合RxJava的相关处理机制,将字符串与实例对象转换等,放在了工作者线程。
- 但是写入失败数据和读取失败数据,由于是IO耗时,我们也放在了工作者线程。
- 网络请求,我们利用了OKHttp的自有线程,并没有进行外部线程控制
不足与问题
- 极端情况下,可能会造成某些数据丢失(之前的实现方式也有问题)
- 分批切块的阈值缺少实践验证是否为最佳数值
- 实时上报检测时间阈值可能并非最佳
调试日志
-->adb logcat |grep --color=always -E "BufferedUsageEventUploader|UsageEventUploadManger|SecooDataUploader|AsyncDataPersister"
-
智能日志输出方法
-
设定网络请求的header信息
-
防快速点击处理代码
-
Integrating razorpay into your webapp
-
Java时间复杂度
-
小白从零开始到实现自动化打包
Android Developer