解决一次adapter嵌套不更新内容
解决一次时间复杂度本问题导致多个异常现象,包括但不限于 子adapter中无内容 子recycler view连view都没有,不显示 场景还原(recycler View简称为rv,view holder简称为vh) rvA有一个adapter,包含着多个item, 每个item有着各自对应的vh 某个vh中包含着一个rvB,rvB有一个adapter,包含着多个item, 每个item有着各自对应的vh 某个vh中包含着一个rvC,rvC有一个嵌套adapter 这里的嵌套adapter是什么意思呢,是说这个主adapter的成员变量中有一个子adapter 也就是说,如果要更新的话,需要更新子adapter也要更新主adapter 问题背景: 因为每次赋值都会导致requestLayout,会有性能损耗(因为某些原因,会notify频繁) 为了性能优化,尽可能的少给recycler view赋值adapter 抽象代码
解决一次时间复杂度
解决一次时间复杂度本问题导致多个异常现象,包括但不限于 ANR 崩溃 mqtt处理缓慢与异常 主线程事件堆积 场景还原 首先消息传输协议采用的是mqtt消息流式传输,消息数量并不固定 目标:每次收到连续的消息后处理已有的全部消息,并解析出恰当数据,从而向上更新到UI 正确实现 假设有n条消息,且每条消息都会稳定收到 则:从0号消息一直获取到n-1号消息后,应当一共处理n次。此时,时间复杂度是O(n) 错误实现 假设有n条消息,且每条消息都会稳定收到 则:从0号消息,再到获取n-1号消息后 获取到0号消息时: 处理0号 获取到1号消息时: 处理0号 处理0,1号 获取到2号消息时: 处理0号 处理0,1号 处理0,1,2号 获取到3次消息时: 处理0号 处理0,1号 处理0,1,2号 处理0,1,2,3号 此时,时间复杂度是O(n²)
onCreateViewHolder
记录一次onCreateViewHolder频繁调用的问题场景: 一个父recycler view内有多个子item,每个item有其对应的自定义ViewHolder,而有某两个ViewHolder分别有自己的一个recyclerview。 把父recycler view命名为rvParent 把这两个ViewHolder命名为vhA和vhB 把这两个recycler view命名为rvA和rvB 问题:假设vhA和vhB都加载完毕。每次滑动rvParent滑出再滑入rvA和rvB时,表现不同。 rvA流畅 rvB总是卡一下 定位问题 通过大量的时间戳判断以及bind判断。定位到是rvB每次滑出再滑入时,rvB的adapter总会走很多次onCreateViewHolder与onBindViewHolder 额外信息 针对adapter的notifyItemDataSetChanged,在本场景中,是通过多种数据更新后再进行needNotify的判断。 使用“开发者选项–Profile GPU...
解bug请拉取最新分支
该 BUG 是在某些场景下, 会引发崩溃 所打印出的日志,仅仅提示了所在 activity 已知该 BUG 能否复现,在多个代码版本的表现不同 老版本没问题 新版本有问题 我本地代码没问题 此时就应该敏感的先确认自己本地代码是否拉取新代码 但是因为到晚上了注意力下降,并没有从这方面发掘。反复阅读代码仍未发现问题!!!最终结果:同事在他那里发现是新的提交造成的问题 而我本地代码没有拉取这个提交,自然如何 code review 也找不到原因。 还有个,logcat 中的 getString() 描述这个 bug 的描述一开始说是资源丢失。最关键的 getString(),我一度认为是在读取文本资源等内容的时候资源索引不到。 但是最终发现,确实是 getString() 的格式化的问题。 在 Kotlin 中使用 getString() 替换占位符: <resources> <string name="greeting_message">Hello, %1$s! You have %2$d new...
Skeleton Layout
Skeleton Layout· 最近研究了recyclerView与viewPager2同步滑动· 最近研究了使用骨架屏优化加载 涉及链接: https://github.com/Faltenreich/SkeletonLayout https://github.com/bumptech/glide 提取核心问题: 如何使用 recyclerView 展示A内容,并在滑动A内容的时候,同步切换放在 viewPager2 的B内容 确认二者信息可以通过某种关系映射 使用 RecyclerView.OnScrollListener 来监听 RecyclerView 的滚动 根据 RecyclerView 的滚动位置,设置 ViewPager2 显示相应的页面 recyclerView 如何搭配 SkeletonLayout 使用 adapter 中,初始数据如果为 map.isEmpty() == true ,建议配置一个虚假 key to null 这样的话,能默认骨架屏loading一个空的单个的内容 adapter 的 current item 的值如果非空,则进入...
kotlin lambda guide
Kotlin Lambda 表达式参数确定指南在 Kotlin 中,Lambda 表达式中的 -> 前的参数取决于它实现的接口方法的简名。以下是一些实用方法,帮助你确定参数的个数及其类型。 1. 查看接口方法定义Lambda 的参数个数和类型完全由实现的接口方法确定。例如: 示例:setOnClickListenerpublic interface View.OnClickListener { fun onClick(v: View?) } 因此,setOnClickListener 的 Lambda 中会包含一个参数 View: binding.buttonSnackbar.setOnClickListener { view: View? -> // 参数 view 是点击的 View } 你也可以省略参数类型,Kotlin 会自动推断: binding.buttonSnackbar.setOnClickListener { view -> ...
常用命令
mid=(left+right)/2溢出 mid=left+(right-left)/2 mid=left+((right-left)>>1) 长度读取 length属性:用于获取数组长度; length()方法:用于获取字符串长度; size()方法:用于获取泛型集合有多少个元素; System.out.println(new int[]{0, 1}.length); System.out.println("123".length()); System.out.println(new HashSet<Integer>() {{ add(1); add(2); }}.size()); 目标:对数值进行取整操作。 四舍五入:Math.round(result); 记忆方式:单词round,是“附近”的意思 向上取整...
street fighter learning
date: 2024-09-11 00:51:45街霸6 不能乱动 不能乱升龙 不能用迸和升龙压起身 绿冲可以确定某些突进技
leetCode2024
链接集合 分享|如何科学刷题? 「新」动计划 · 编程入门 编程基础 0 到 1 分享丨【题单】滑动窗口与双指针(定长/不定长/单序列/双序列/三指针)一、定长滑动窗口 定长滑窗套路:总结成三步:入-更新-出 入:下标为 i 的元素进入窗口,更新相关统计量。如果 i<k−1 则重复第一步。 更新:更新答案。一般是更新最大值/最小值。 出:下标为 i−k+1 的元素离开窗口,更新相关统计量。 可以使用IDEA leetCode插件,可以直接获取list https://leetcode.cn/problem-list/IXxZMHkv/ 二、二分查找 红蓝染色法 保证闭区间 [L,R] 内的颜色都是不确定的,且 L-1 和 R+1 的颜色是确定的 循环不变量 L-1 始终是红色 R+1 始终是蓝色 R+1 是我们找的答案,循环结束时,R+1=L 防止溢出: mid = left + (right-left)/2 解题思路:二分查找low_bound...
Web Security
MD5用作校验和来验证数据完整性 scryptScrypt 主要用作加密货币的工作量证明算法。 bcryptBCRYPT 是一种密码哈希函数,自 1999 年发布以来已被证明是可靠和安全的。它已被实现到大多数常用的编程语言中。 SHASHA-256 和 SHA-512 最受欢迎。SHA-2 仍然安全且被广泛使用。 HTTPS https://www.cloudflare.com/en-gb/learning/ssl/what-is-https/ OWASP CORS SSL/TLS CSP Server Security API Security Best Practices