AI笔记本

2026年以前手搓博客一千多篇。如今 Claw、Cursor、Claude 等 AI Agent 横空出世。只需一句话,AI 就能生成文章、调整格式、润色语言,并一键自动发布。欢迎来到 AI 驱动博客时代 🚀

文章列表

Scrcpy投屏扩展插件:ScrcpyController
分享

Scrcpy投屏扩展插件:ScrcpyController

Scrcpy投屏扩展插件:ScrcpyController之前分享过一个安卓投屏工具:Scrcpy,日常开发调试使用起来非常方便。平时只用到了Scrcpy的皮毛,其实Scrcpy还有很多参数可以配置(横竖屏、大小、置顶、录屏等),因为对参数不熟悉、记不住、配置麻烦而很少用。有一位孟买老哥受不了了,写了一个ScrcpyController插件,方便的在AndroidSutdio中通过图形界面配置Sc

2.1k
探究onAttachedToWindow和onDetachedFromWindow
Android

探究onAttachedToWindow和onDetachedFromWindow

探究onAttachedToWindow和onDetachedFromWindowProgressBar,是很多开发者一开始接触安卓开发就使用过的控件,用来显示加载进度。查看ProgressBar源码,在onAttachedToWindow()方法中开启进度条加载动画:在与之对应的onDetachedFromWindow()方法中停止动画:onAttachedToWindow()和onDetach

2.4k
PlantUML:绘制程序员的流程图
分享

PlantUML:绘制程序员的流程图

PlantUML:绘制程序员的流程图程序员在进行软件设计的时候,画各种时序图、流程图是一件头疼的事。可以用SequenceDiagram一键生成时序图,还可以用专业的流程图软件,比如迅捷流程图。在绘画流程图的时候,经常会在对齐连接线等操作上浪费大量时间。于是就有了程序员专属的流程图方式,PlantUML通过解析文本来渲染生成图形,使用起来非常高效。官网:plantuml.comGitHub:git

2.6k
View的invalidate()流程​
Android

View的invalidate()流程​

View的invalidate()流程自定义View的时候常用到invalidate()方法,为了刷新View以重新绘制。和requestLayout()不同的是,调用invalidate()后只会回调调用View的draw()方法;而调用requestLayout()则会从上到下重新测量、布局一遍。 应根据实际情况选择使用invalidate()还是requestLayout(),如果只需要刷新

2.5k
View的requestLayout()流程
Android

View的requestLayout()流程

View的requestLayout()流程requestLayout()常用来对View重新进行测量、布局和绘制。当View需要更新当前的布局时,就向父布局申请重新布局。虽然是ViewParent接口中定义的方法:但其完整实现却在View中,而不在ViewGroup类里(后面会讲到):在继续跟随源码剖析requestLayout()流程之前,先搞清楚View中的mParent从哪来?1、View

2.4k
免费的录屏软件 oCam ​
分享

免费的录屏软件 oCam ​

免费的录屏软件 oCam找到一个免费而且简洁的视频录制软件:oCam,之前录视频用的是Camtasia不仅付费而且操作麻烦。1、下载安装从Softonic下载oCam安装:oCam Download。2、界面功能界面简洁,菜单中有三个常用的录制场景:视频录制、游戏录制、音频录制,一键录制非常方便。日常录制视频不需要那么多眼花缭乱的菜单,只需录制、区域选择、声音设置、编码设置这几个。使用默认选项录制

2.1k
简单快速的对象存储库:Paper(二)
开源

简单快速的对象存储库:Paper(二)

简单快速的对象存储库:Paper(二)在前面简单快速的对象存储库:Paper(一)中介绍了Paper库及其简单使用,Paper库代码不多,源码也易于阅读,主要理解其设计。简要概括Paper设计如下:1、获取Book实例开发者无需关注Book实例的构造,只需通过Paper提供的几个方法获取Book实例:①获取指定名称的Book,不能使用内部保留名称DEFAULT_DB_NAME②获取默认DEFAUL

1.7k
简单快速的对象存储库:Paper(一)
开源

简单快速的对象存储库:Paper(一)

简单快速的对象存储库:Paper(一)在GitHub上淘宝,最近又发现一个设计精巧而简单快速的存储库:Paper,可以考虑用来替代Preference。另一位牛人César Ferreira基于Paper,结合RxJava写了一个RxPaper2。GitHub:https://github.com/pilgr/Paper1、PaperPaper,正如其名:此库旨在让开发者存储对象数据,犹如在纸上写

1.8k
Android

Android Touch事件分发与MotionEvent详解

Android Touch事件分发与MotionEvent详解Android开发中Touch事件的处理无处不在,从简单的OnClickListener到复杂的自定义View手势识别,理解Touch事件的分发机制是解决滑动冲突、优化交互体验的基础。本文将从MotionEvent的数据结构出发,系统梳理Touch事件从Activity到View的完整分发链路。1、MotionEvent数据结构Moti

183
adb无线调试插件
分享

adb无线调试插件

adb无线调试插件早在adb Wifi调试一文介绍过adb支持无线调试,不再需要连着长长的一根USB线。今天在AndroidStudio找到了一个adb无线调试插件,一键连接更快捷,又可以省几秒时间。在AndroidStudio的Plugins插件商店搜索 ADB Wi-Fi 安装。注意不要安装错了,其它几个类似插件已经不再维护用不了。不兼容最新AndroidStudio版本的插件每次打开都会报错

2.1k
Android

Android ColorStateList 详解

Android ColorStateList 详解1、ColorStateList 概述ColorStateList 是 Android 中用于管理不同状态下颜色的类,它允许为 View 的不同状态(如按下、聚焦、禁用等)设置不同的颜色。ColorStateList 广泛应用于按钮、文本框等控件的颜色管理,是实现响应式 UI 的重要工具。核心特性: - 支持多种 View 状态的颜色定义 - 可以

158
UncaughtExceptionHandler 原理​
Android

UncaughtExceptionHandler 原理​

UncaughtExceptionHandler 原理使用UncaughtExceptionHandler捕获运行时线程中发生的未捕获异常,可以极大的提高应用稳定性。UncaughtExceptionHandler使用很方便,参考异常捕捉:UncaughtExceptionHandler一文。1、线程异常传递当线程运行出现奔溃,JVM虚拟机会调用Thread的dispatchUncaughtExc

2.4k
最好用的Git GUI工具:SourceTree​
Git

最好用的Git GUI工具:SourceTree​

最好用的Git GUI工具:SourceTreeSourceTree作为老牌免费GUI工具,号称最好用的Git GUI工具。由Atlassian开发商出品,值得信赖。1、代码仓库管理SourceTree能方便的管理多个代码仓库。1.1、本地仓库本地已有的代码仓,可以直接拖到SourceTree中打开。如果需要查看远程代码仓,用SourceTree直接Clone一个到本地目录:1.2、远程仓库Sou

2.7k
Android

MessageQueue中的同步屏障

MessageQueue中的同步屏障Message,最早可以翻到两年前写的一篇粗浅博客《信件:Message》。当时还不明白异步消息、同步消息,更不懂今天要写的同步屏障。同步屏障,简而言之就是让异步消息的优先级高于同步消息,优先被处理。1、同步屏障MessageQueue设置同步屏障后,会拦截对同步消息的处理,只会处理异步消息,如果没有异步消息则进入阻塞状态。若没有及时移除同步屏障,所有的同步消息

2.1k
Choreographer源码阅读
Android

Choreographer源码阅读

Choreographer源码阅读之前已经在很多地方看到过Choreographer的身影,必须要仔细的看一遍Choreographer源码以理解其实现原理。Choreographer请求和接受来自底层的VSYNC信号,给上层应用提供一个稳定的周期,去处理Input事件、动画、更新布局等。1、Choreographer构造及初始化Choreographer直译为编舞者,看完源码更能理解Choreo

2.7k
Git可视化工具:Sublime Merge
Git

Git可视化工具:Sublime Merge

Git可视化工具:Sublime Merge同事推荐了一个Git 可视化客户端:Sublime Merge ,由知名文本编辑器 Sublime Text 开发商打造。自己平时用的则是最好用的Git GUI工具:SourceTree,也体验了下Sublime Merge,用起来还不错。直接点击下载或购买后,安装即可。功能免费,完整功能无限制使用。但是订阅内容(比如更换主题)付费。Sublime Me

2.8k
Animator属性动画源码
Android

Animator属性动画源码

Animator属性动画源码仔细看看属性动画的源码,加深对动画实现原理的了解。ObjectAnimator继承自ValueAnimator,本篇主要以ValueAnimator为主。关于属性动画,详见之前两篇介绍属性动画的文章:属性动画:ValueAnimator和属性动画:ObjectAnimator。1、属性动画的构造得益于框架优秀的设计,构造一个属性动画对象很简单,举个简单的例子:从Valu

2.4k
一键解除文件占用:LockHunter
分享

一键解除文件占用:LockHunter

一键解除文件占用:LockHunter前段时间在Windows解除文件占用小技巧一文中,记录了Windows下接触文件占用的方法,步骤还是比较繁琐的。要是能一键解除文件占用可以让效率提高不少。(火绒安全软件右键也有这个功能)功夫不负有心人,找到了一个免费的文件解锁神器:LockHunter,LockHunter用于对抗恶意软件和其它无故阻止文件的程序。 与其他类似工具不同,它会将文件删除到回收站中

4.5k
布局彩蛋:BlinkLayout闪烁布局
Android

布局彩蛋:BlinkLayout闪烁布局

布局彩蛋:BlinkLayout闪烁布局解析XML布局的过程中有一个彩蛋,在LayoutInflater类中的tryCreateView()方法里:其中TAG_1995标签的定义如下,在这里还能看到熟悉的两个布局tag:<merge/>和<include/>。1、使用<blink/>新建一个普通项目,在XML布局中尝试一下<blink/>这个标签:忽略AndroidStudio的Cannot re

2.1k
LayoutParams初始化流程
Android

LayoutParams初始化流程

LayoutParams初始化流程在View布局参数LayoutParams一文中对布局参数有了详细的了解。用getLayoutParams()方法获取View的布局参数:每个View中的mLayoutParams实例可以通过setLayoutParams(ViewGroup.LayoutParams params)方法设置的:不需要为View初始化mLayoutParams实例,因为这是View

2.1k