AI笔记本

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

文章列表

短信操作:原来用户隐私这么容易暴露
Android

短信操作:原来用户隐私这么容易暴露

短信操作:原来用户隐私这么容易暴露Android电话通讯讯息管理相关的模块是Telephony。其源码在../frameworks/base/telephony路径中,目录结构如下。1、短信模块手机应用很多都会有短信读取识别功能,主要就是通过短信模块提供的TelephonyProvider对短信进行查询等操作,由系统维护的Provider,位于系统/packages/providers/目录下,诸

1.9k
Android

Android中的各种目录

Android中的各种目录Android开发中涉及到很多存储的知识,比如会读取各种目录下的文件,将文件写到指定的目录下。这时候就要对Android的目录结构和系统提供的目录相关的属性和API有所熟悉。与目录相关的方法在Context和Environment类中。1、Context获取目录Context上下文提供了一些方法,获取不同的目录。接下来一一介绍这些方法。1.1、getFileStreamP

3.4k
Android

BroadcastReceiver:广播的使用

BroadcastReceiver:广播的使用广播是Android四大组件之一。用广播可以实现简单进程间通信;一定程度上还能解耦;关于BroadcastReceiver的原理参考BroadcastReceiver工作流程。广播除了用来通知,桌面小部件AppWidgetProvider也是继承自BroadcastReceiver实现更新桌面挂件的,参考AppWidgetProvider:桌面小挂件。

1.9k
Android

multiDex:分包

multiDex:分包开发的APP功能越来越多,引入的库也越来越多,很容易达到“界限”65536,因为Android中一个Dex文件最多存储65536个方法(short类型的范围)。这时候就要开启“分包”multiDex。1、Android 5.0之后分包Android 5.0也就是API 21之后ART虚拟机支持MultiDex。直接在build.gradle文件中直接配置multiDexEna

1.7k
Code

异常捕捉:UncaughtExceptionHandler

异常捕捉:UncaughtExceptionHandler 1、UncaughtExceptionHandlerUncaughtExceptionHandler是定义在Thread类中的接口,用于处理导致线程终止的未捕获异常。2、自定义UncaughtExceptionHandler只需要实现Thread.UncaughtExceptionHandler接口,实现uncaughtException

2.1k
Android

Bitmap加载选项:BitmapFactory.Options

Bitmap加载选项:BitmapFactory.Options1、BitmapFactory.OptionsBitmapFactory.Options是BitmapFactory加载Bitmap用到的选项配置,用于解码Bitmap的时设置各种参数选项。BitmapFactory的使用参考BitmapFactory详解。2、重要属性BitmapFactory.Options类有很多public成员

1.8k
开源

DiskLruCache简介

DiskLruCache简介Android开发中经常用到三级缓存:内存缓存、硬盘缓存、网络缓存。速度也是由快到慢。内存缓存用到的是LruCache,这里来介绍一下硬盘缓存DiskLruCache。GitHub:DiskLruCacheAPIDoc:DiskLruCache1、添加依赖DiskLruCache不是Android官方的工具类,是由大神JakeWharton写的。该库已经归档,不再维护。

1.8k
Android

HandlerThread源码的实现

HandlerThread源码的实现HandlerThread继承自Thread,和普通线程一样,只不过HandlerThread有自己的Looper,线程启动之后可以用HandlerThread中的Looper创建Handler,向Handler发送消息,将任务放到线程中执行。比如熟悉的IntentService,内部就是借助HandlerThread在子线程中执行onHandleIntent(

1.7k
IntentService原理
Android

IntentService原理

IntentService原理之前记录了一篇IntentService 的使用(参考IntentService使用详解),没有详细对IntentService的实现原理进行深入颇析。正好阅读Android源码,对一些实现原理进行深入的了解。先介绍一下IntentService中两个重要的成员变量:mServiceLooper和mServiceHandler。在IntentService初始化的时候

1.7k
Android

源码颇析AsyncTask工作原理

源码颇析AsyncTask工作原理Android开发中经常会用到AsyncTask开启异步任务,后台执行耗时操作,具体用法参考《AsyncTask:异步任务》。现在从源码来看看AsyncTask的实现机制。1、AsyncTask中的线程池AsyncTask中封装了两种Executor,一个是顺序执行的SERIAL_EXECUTOR,另一个是并发执行的THREAD_POOL_EXECUTOR。1.1

1.8k
Android

Thread和ThreadLocal

Thread和ThreadLocal Handler获取当前线程的 Looper 对象,而每一个线程的 Looper 是不一样。每一个线程都有一个 Looper 对象,使用 ThradLocal 去保存和获取当前线程的 Looper 是最佳的选择。Android中Handler、Looper消息机制得益于巧妙的运用了ThreadLocal的特性,关于Handler机制参考Handler、Loope

1.9k
Handler、Looper、MessageQueue消息机制原理
Android

Handler、Looper、MessageQueue消息机制原理

Handler、Looper、MessageQueue消息机制原理Android消息机制是安卓开发中非常重要的,在子线程中处理完I/O、网络请求,使用Handler切回到主线程处理。1、LooperAndroid Looper设计的非常巧妙,使用ThreadLocal实现这个特性。关于ThreadLocal参考另外一篇Thread和ThreadLocal。1.1、主线程Looper一个Applic

1.9k
ContentProvider启动流程及原理
Android

ContentProvider启动流程及原理

ContentProvider启动流程及原理ContentProvider作为Android的四大组件之一是非常重要的,它的用法参考ContentProvider的用法。本篇主要顺着源码理解ContentProvider的启动和底层原理。1、ContentProvider启动当一个APP启动的时候从ActivityThread的main方法入口加载的过程中就会初始化本应用的ContentProvi

2.0k
BroadcastReceiver工作流程
Android

BroadcastReceiver工作流程

BroadcastReceiver工作流程广播是安卓开发四大组件之一,比较常用。使用起来也很方便,具体使用参考《BroadcastReceiver:广播》。这里顺着源码看看BroadcastReceiver的实现逻辑。1、注册/反注册代码中注册广播只需一行代码即可注册广播:Context中的抽象方法ContextWrapper是Context的实现类,内有mBase成员变量ContextImpl都

1.8k
Service启动流程分析
Android

Service启动流程分析

Service启动流程分析Service作为Android的四大组件之一非常重要,比起一些后台执行的子线程、异步任务,Service更强大可靠。Service的启动方式有两种一种是直接start启动一个Service,另一种是bind方式绑定一个Service启动。IntentService就是Service,启动方式与普通Service无差。Service及IntentService参考《Ser

1.8k
Activity启动流程源码分析(旧版)
Android

Activity启动流程源码分析(旧版)

Activity启动流程源码分析(旧版)2020年4月19号,周末两天把Activity启动的源码流程捋一遍。Android源码确实太“跳”了,如果对Android整体源码的框架没有整体的概念,可能很容易读着读着“跟丢”代码。重新装上Visio,一遍看源码,一遍捋逻辑图。对代码阅读能力确实有很大提升,想到去年刚进项目的时候,先统计了一下模块的代码,大概十万行,这得看到什么时候啊!其实不需要全部都看

1.9k
Android

Android Drawable

Android Drawable安卓开发中经常用到Drawable设置View的背景,那只是最基本的用法,Drawable可远不止这些,现在就来系统的学习一下Android Drawable系列。1、DrawableDrawable官方定义是“可以绘制的东西”的一般抽象概念。框架中有非常多的Drawable派生类,方便开发者使用:ShapeDrawable、StateListDrawable、La

1.9k
AndroidStudio:格式化注释
Code

AndroidStudio:格式化注释

AndroidStudio:格式化注释1、格式化缩进①Settings > Editor > Code Style > Java > Wrapping and Braces;格式化注释缩进对齐②Settings > Editor > Code Style > Java > JavaDoc;不格式化注释2、注释起始空白被迫缩进一团格式化会自动将前面全部是空格字符的注释缩进,缩成一团:可以使用任意非空

1.8k
护眼大法:各种软件开启护眼模式
分享

护眼大法:各种软件开启护眼模式

护眼大法:各种软件开启护眼模式工作半年多,朝九晚十的天天盯着电脑屏幕视力下降明显,还有部分原因是因为看手机。各种护眼保健品已经吃起来了,还是得从源头缓解一下,开启电脑上各种软件的护眼模式。1、护眼色在搜索引擎搜“护眼色”,就会搜出一堆关于保护眼睛的屏幕颜色文章,说的统统是一种颜色,叫“绿豆沙”的颜色。颜色代码:#C7EDCC色调:85 饱和度:123 亮度:205R: 199 G: 237 B:2

2.1k
Toast:前后台弹出Toast不一致?
Android

Toast:前后台弹出Toast不一致?

Toast:前后台弹出Toast不一致?Toast不用再多说了,Android中非常常见的轻量级提醒。用法很简单,但是周末无意中发现一个Toast提示信息和实际代码中的不一样。难道自己又遇到“玄学”问题了?1、Toast源码正常弹出Toast很简单,一行代码的事情。源码如下,第二个参数CharSequence text就是设置Toast显示的文字信息。2、实际Toast但是发现弹出的和显示的不一样

1.8k