- 博客(95)
- 资源 (3)
- 收藏
- 关注
原创 invalidate(),postInvalidate()和requestLayout()区别
这三个方法都是用于触发视图更新的,但它们的应用场景和触发的“更新级别”完全不同。
2025-11-11 21:11:51
883
原创 分糖果算法题
分糖果,圣诞节到了,城堡里有k个小朋友,圣诞老人魔力袋里带了n件无差别的小礼物,请圣诞老人处理,将n个无差别的礼物分给k个小朋友的分法问题,给定n和k,输出总分法总数,并枚举所有的分法。其中 | 作为分隔符,每个小朋友的糖果用星号表示。示例:3个糖果分给2个小朋友。
2025-11-08 21:25:25
363
1
原创 Room持久化库中,@Transaction注解的正确使用场景是?
场景目的示例原子性操作确保多个写操作(增、删、改)全部成功或全部失败。银行转账、批量数据替换、关联数据更新。复杂查询确保在读取多个关联表时,获得一个一致的数据视图。使用@Relation或复杂 JOIN 查询一次性获取嵌套数据。关键要点:默认行为:默认情况下,Room 中的每个@Query@Insert等方法都在一个独立的事务中运行。让你能将多个方法调用捆绑在一个事务中。自动处理:你不需要手动调用或,Room 会为你处理所有样板代码。挂起函数:在方法内,你可以自由调用其他挂起的 DAO 方法。
2025-10-10 16:44:54
836
原创 如何优化Android app耗电量
优化 Android 应用的耗电量是一个非常重要且常见的挑战。耗电优化不仅能提升用户体验,延长设备使用时间,也是应用高质量的表现。以下是一份从的完整耗电优化指南,涵盖了原则、工具、具体策略和最佳实践。
2025-09-26 12:52:37
821
原创 android事件分发机制
android事件分发顺序可以概括为:Activity -> Window -> DecorView -> 顶级 ViewGroup -> … -> 子 View。
2025-09-01 16:01:24
726
原创 数据结构-树
(2)若n>1,则除根结点外,其余结点被分成了m(m>0)个互不相交的集合T1,T2,…Tm,其中每一个集合Ti(1<=i<=m)本身又是一棵树。,Tm称为这棵树的子树。树是n(n>=0)个具有相同类型的数据元素的有限集合。树中的数据元素叫作结点。n=0的树称为空树;(1)有且仅有一个特殊的结点称为树的根结点,根没有前驱结点。
2025-08-29 10:53:10
222
原创 Android线程同步机制
机制核心思想适用场景优点缺点互斥同步,基于JVM内置锁简单的同步块或方法简单自动,不易出错功能单一,不够灵活互斥同步,显式锁需要高级功能(超时、可中断、公平性)功能丰富,灵活需手动释放,易忘记volatile禁用缓存和重排序状态标志,单一变量的可见性轻量级,无阻塞不保证原子性原子类 (Atomic)CAS无锁编程对单个变量的高性能原子操作性能极高,无阻塞只能用于单一变量线程安全集合内部实现优化(分段锁/CAS/写时复制)替代旧的同步集合,生产者-消费者。
2025-08-27 15:47:27
1024
原创 android多线程与线程间通信
机制特点适用场景现代性底层基础,灵活但稍显繁琐需要精细控制消息、自定义后台循环传统,但必不可少自带Looper的Thread需要一个常驻的、有消息循环的后台线程传统LiveData生命周期感知,与ViewModel搭配基于生命周期的UI数据更新现代 (推荐)代码简洁,结构化并发,易于管理几乎所有异步场景的首选最现代 (强烈推荐)RxJava功能强大,流操作符丰富复杂的异步事件流处理现代,但复杂度高。
2025-08-26 16:12:46
838
原创 常用排序算法
冒泡排序是一种典型的排序方法,其基本思想是通过两两比较相邻记录的关键字,使关键字较大的记录如气泡一般逐渐往上“漂浮”。:重新排列数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面。:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。原理:每次从未排序部分中找到最小(或最大)元素,将其放到已排序序列的末尾。:递归地将小于基准值元素的子数列和大于基准值元素的子数列排序。:在保持元素顺序的同时将上一步得到的子序列合并到一起。
2025-08-25 16:42:21
405
原创 Android UI界面绘制
Android UI绘制从的方法开始,按照的顺序,并从顶级View(DecorView)开始,递归地遍历整个View树,从而完成界面的测量、布局和最终绘制。
2025-08-22 13:41:48
864
原创 HashMap工作原理
HashMap 是 Java 集合框架中最重要且最常用的数据结构之一,它基于哈希表实现了 Map 接口,提供了高效的键值对存储和检索能力。Java 8 之后的 HashMap 采用。
2025-08-19 16:23:49
568
原创 二分查找(Binary Search)
二分查找是一种在有序数组中快速查找目标元素的高效算法,时间复杂度为 O(log n),比线性查找的 O(n) 快得多。
2025-08-17 22:21:23
229
原创 Activity和Fragment生命周期
Activity 类提供7个核心回调集: onCreate(), onStart(), onRestart(),onResume(), onPause(), onStop()和 onDestroy()。(最新版本已废弃)->onStart()->onResume()->onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()再次打开页面调用onRestart()->onStart()->onResume();
2025-08-13 14:47:44
185
原创 OOM内存溢出产生原因和避免方法
OOM(Out Of Memory 内存溢出) 是指应用程序申请内存时,系统无法提供足够的内存空间来满足需求,导致程序崩溃的现象。在Android中通常表现为java.lang.OutOfMemoryError。
2025-08-10 21:30:31
295
原创 斐波那契数非递归实现
F(n)=F(n−1)+F(n−2) (当 n≥2 时)思路:用数组存储所有中间结果,适合需要多次查询的场景。思路:用变量缓存前两个数,逐步计算后续值。方法 2:动态规划(带缓存)时间复杂度: O(n)空间复杂度: O(1)时间复杂度: O(n)空间复杂度: O(n)
2025-08-10 13:36:33
241
原创 Mac电脑基本功能快捷键
若要添加指纹,请前往“系统设置”,点按“触控ID与密码”,然后点按“添加指纹”。若要创建新文件夹,请点按菜单栏中的“文件”,然后选取“新建文件夹”。前往“系统设置”,然后点按边栏中的“墙纸”。点按“添加照片”,然后从文件或“照片”App选取一张照片。若要开始,请在两台设备上登录Apple账户,然后在Mac上打开“iPhone镜像”。若要自定义App设置,请点按App名称,然后选取“设置”。若要开始使用,请打开“系统设置”并点按“屏幕使用时间”。若要打开“控制中心”,请点按菜单栏中的 。
2025-08-04 07:32:30
457
原创 Flutter基础知识
显示定义int a = 0;隐式定义使用var关键字定义的变量,不指定类型,通过系统自动判断,赋值后确定类型,不能再次改变。var aa = 0;使用const关键字定义的编译时常量,它必须是一个字面常量。使用final关键字**定义的是运行时常量,也就是它的值可以是一个变量。普通函数在这里插入代码片return a+b;可选参数匿名函数return a+b;箭头函数匿名函数和箭头函数组合起来使用,具体用法如下:Dart使用class关键字定义类,这一点和java类似。
2025-08-02 18:00:21
400
原创 创建型设计模式-单例模式
问题出在 instance = new Singleton();JVM 可能会进行指令重排序,将步骤 2 和 3 调换顺序。即:先分配内存并让 instance 指向它,然后再初始化。确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。Java中单例模式是一种广泛使用的设计模式。
2025-07-30 10:47:39
297
原创 无障碍开发原理与实践
一、无障碍开发原理与实践android无障碍开发是帮忙视障人士也能便捷地使用APP。Android本身提供了标准的无障碍服务,本文主要是搜索模块在开发无障碍服务的一些实践总结。大部分手机系统已支持无障碍,首先用户需要开启无障碍,选择Android设备 “设置->无障碍”,打开TalkBack开关。浏览方式,开启TalkBack后,可以通过触摸功能浏览屏幕,也可以线性方式滑动浏览屏幕上的各项内容。比如RecyclerView控件自带手指线性导航模式要按照一次查看一项内容的方式浏览屏.
2025-06-25 15:22:19
944
原创 CoordinatorLayout学习笔记
记录协同布局学习之路这篇文章讲的特别好,看了那么多文章后,觉得这篇文章看完有一种豁然开朗的感觉。https://blog.youkuaiyun.com/briblue/article/details/73076458嵌套滑动:CoordinateLayoutView嵌套滑动文章地址:https://blog.youkuaiyun.com/weixin_37077539/article/details/54429646onStartNestedScroll方法:该方法的返回值决定是否执行嵌套滑动onNestedPr
2021-01-07 10:48:33
248
原创 java反射笔记
java反射通过反射的方式调用,分为3个步骤class Student {public String name;public int age;public void setAge(int age){this.age = age;}public void setName(String name){}}通过反射获得类Class cls = Class.forName(“com.demo.bean.Student”);得到调用类方法Method m = cls.getDeclared
2020-10-26 17:57:30
215
原创 Flutter学习笔记(持续更新)
Flutter学习笔记首先打开Flutter官网https://flutter.dev/,开始学习,按照官网的指引搭建Flutter开发环境。(此处略过)Flutter基础在创建UI时在网上查了一些资料,整理下来,方便以后开发中使用。包含不同style的文本组成: RichText( text: TextSpan( text:'', children: ...
2019-03-14 11:41:20
286
原创 工作中遇到的问题(持续更新)
1 在三星手机上出现这个问题,其他手机没发现问题。java.lang.IllegalStateException: Call CookieSyncManager::createInstance() or create a webview before using this class清除Cookie或者获取Cookie前,首先同步。报错代码:public String getCookies......
2018-09-20 10:35:07
434
原创 Git学习笔记
git学习笔记之前使用Git,都是使用SourceTree。因为SourceTree升级到一个版本,提交代码更新代码都非常慢。 后来尝试使用命令行,记录一下学习内容。Git命令总结 初始化一个Git仓库[git init命令] git新建一个空的仓库,当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库。 将文件添加到仓库[git add命...
2018-05-04 20:35:31
609
原创 如何外部修改AndroidManifest.xml中android:scheme的值
公司有个小需求,需要动态配置AndroidManifest.xml中android:scheme的值。 这就转化成通过一个外部java工程修改xml节点值的问题。其中AndroidManifest.xml需要约定一个规则:activity android:name=".MainActivity"> intent-filter>
2018-01-07 12:27:32
7750
1
转载 工作记录-mysql数据库表增加字段(从000001开始递增)
mysql数据库的student表结构如下:idnameage1zhangsan162alice203lanlan304haha25如果新增一个字段no,规则是:六位数,从000001开始依次递增。idnameageno1
2017-11-14 14:44:06
3987
原创 android基础知识
Application Not Response应用程序无响应。在Service后台执行耗时操作。BroadcastReceiver的onReceiver方法中执行耗时操作。应用程序可以接收输入事件(按键、触屏、轨迹球等),当5秒内没有处理完毕时,则会引发ANR。ANR机制以及问题分析https://duanqz.github.io/2015-10-12-ANR-Analysis。
2017-08-11 22:01:34
654
使用SwipeRefreshLayout和RecyclerView实现下拉刷新列表数据的效果
2016-05-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅