自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

呆咖啡的博客

年轻的我们,先要学会记录

  • 博客(93)
  • 资源 (2)
  • 收藏
  • 关注

原创 android CMake 语法 和基础

以前的Cmake版本都是在output.txt,现在最新版本Cmake在metadata_generation_stderr.txt或cmake_server_1og,害我寻找了半天。message("ar0 ----${ARGV0}-ar1 ----${ARGV1}-ar2 ----${ARGV2}")#参数1 ~3的值。message("CMAKE_ARGC---${CMAKE_ARGC}")#传入的参数个数。message("all argv ----${ARGV}") # 所有参数。

2024-05-16 16:19:57 257

原创 Surface 学习笔记一

在Android开发中,“Surface”是一个重要的概念,它代表了一个可以在屏幕上绘制的区域。Surface可以是一个独立的窗口,也可以是一个View(视图)的一部分。在Android的图形系统中,Surface用于将图形渲染到屏幕上,包括绘制UI元素、图像、视频等。开发者可以通过Surface类来绘制各种图形、文本、图像等内容,从而创建自定义的用户界面或者游戏画面。Surface可以用来播放视频或者实现动画效果,通过不断地更新Surface上的内容,可以创建流畅的动画效果。

2024-05-15 16:58:00 504

原创 android 蓝牙技术 学习记录 二

BluetoothDevice--------------------蓝牙设备。BluetoothGattCallback--------------连接回调。----autoConnect 是否自动连接参数。----transport 是否低功耗。

2024-05-10 16:57:26 344

原创 android 蓝牙技术 学习记录

蓝牙权限定位权限BluetoothAdapter 蓝牙适配器蓝牙扫描类-----开关蓝牙等功能BluetoothLeScanner 蓝牙扫描设置ScanFilter 蓝牙扫描过滤条件----名字过滤,uuid过滤等功能蓝牙扫描设置---------省电的扫描,等功能ScanCallback 蓝牙扫描结果回调。

2024-05-10 11:17:27 881 1

原创 android 安全机制 和权限管理 的一点研究

在Android中SEAndroid安全机制(MAC)与传统的Linux UID/GID安全机制(DAC)是并存关系的,也就是说,它们同时用来约束进程的权限。其中1077,1065,3002,3003,3001代表的就是用户组,通过`/system/core/include/private/android_filesystem_config.h` 查看可知对应这权限组的作用。--------------------------我是分割线---------------------------------

2024-05-09 17:12:29 835

原创 【android 问题 之--自问自答】

答:是的.必须要和new_ task 配套使用。即使是两个app跳转,也需要这样。单独任务栈作用,比如图库,保活等待栈之间互不干扰的活动。

2024-04-26 15:50:33 339 1

原创 android和java 线程Tread

当线程对象调用了Thread.start(方法之后,该线程处于就绪状态,Java虚拟机会为其创建方法调用栈和程序计数器,处于这个状态的线程并没有开始运行,它只是表示该线程可以运行了。从start(源码中看出、start后添加到了线程列表中,接着在native层添加到VM中,至于该线程何时开始运行,取决于IVM里线程调度器的调度(如果OS调度选中了,就会进入到运行状态)。回看一下下面start方法源码:java层---nativeCreate(this,stack Size,daemon)

2024-04-18 15:23:27 1036

原创 旋转链表【算法题】

记给定链表的长度为 n,注意到当向右移动的次数 k≥n 时,我们仅需要向右移动 k  mod  n 次即可。因为每 n次移动都会让链表变为原状。这样我们可以知道,新链表的最后一个节点为原链表的第 (n−1)−(k mod n)个节点(从 0 开始计数)。,旋转链表,将链表每个节点向右移动。给你一个链表的头节点。

2024-04-10 14:22:56 120

原创 【flutter启动分析】

/////例如:你去修改 地区,修改中国大陆, 发生改变的时候,就会执行回调例如:你去修改文字缩放时, 发生改变的时候,就会执行回调例如:用户的,点击,双击,滑动,拖拽等等 的 手势操作,,就会执行回调例如:当上一步完成后,就会执行回调整体就是对PlatformDispatcher的修饰和优化,核心还是PlatformDiapatcher,可以从PlatformDiapatcher获取一些界面相关信息。获取 c++引擎发生的事件等,然后触发和回调。

2024-04-10 11:22:37 1136

原创 布局约束问题- Flutter

-----Rongqi ---一个大小1000的图标 --容器4。相当于满足根布局要求的占满宽高,然后居中自己的子集---》这个时候就可以用子集 的宽高了。-------Container--width:60,height :60 --容器3。---- width:1,height :1 ---容器1。----Center---容器2。根布局----依照操作系统,必须占满整个屏幕【占满当前屏幕】--runApp 根布局。

2024-04-08 15:40:47 446

原创 【flutter和android原生的异步】

java android 中,是多线程的。

2024-04-07 11:54:31 546 1

原创 Flutter Key 讲解

模式模式下,value就是我们的widget。

2024-04-01 17:29:24 406

原创 android 音视频基础知识--个人笔记

avi,mkv封装格式数据------》音频流,视频流//字母流(国外会分开)----〉解封装,解复用打开封装格式-----》视频压缩数据---压缩H264,H265 -------〉视频解码----》原始数据YUV-----〉音频压缩数据---》AAC〉Mp3等等-------》音频解码(很耗时)---〉获得原始数据PCM-------------------音视频同步--------------------喇叭---声道----音频重新采样(转变设备支持的声道。如双声道转单声道)

2024-03-29 16:34:49 575 1

原创 Android JNI---入门了解

array[数组的数据类型method(参数类型)返回值类型 _ void name (int a, double b)NDK已经把JDK的jni封装好了,ndk里包含了gcc ,g++,jni,工具链等等。因为Java 具备跨平台的特点,所以ava 与 本地代码交互的能力非常弱。采用JNI特性 增强Java 与 本地代码交互的能力。c/c++ 调用java对象的属性/方法的 签名规则。void-object--L完整的类名;看名字你就能知道这东西是做什么的了吧。java类型---属性类型符号。

2024-03-29 13:35:36 356

原创 Flutter动画笔记---总结

第一种情况:隐式动画,全自动动画(属于内部封装好了,只需要几行代码,就可以实现非常强大的效果)第二种情况:显示动画,手动控制的动画(提供自定义选择,更灵活的来完成所有苛刻动画需求 等)1.(循环重播,随时中断,多方控制协调) 等需求的动画,就可以使用【全自动动画-隐式】2.(循环重播,随时中断,多方控制协调) 等需求的动画,就可以使用【全自动动画-显示】做一个动画需求: (此需求的动画,是不是会一直循环,是一直循环,无法停止下来的动画)true。一定要要求,美工提供素材,有素材后,第三种情况:其他动画(

2024-03-28 15:59:55 389

原创 【Flutter】小技巧

/ TODO stless:快捷键生成 无状态的Widget。// TODO stful:快捷键生成 有状态的Widget。// TODO stanim:快捷键生成 显示动画的代码区域。

2024-03-28 15:42:27 82

原创 android 串口开发的协议有哪些,怎么自定义开发协议

在 Android 串口开发中,协议通常用于定义数据的格式和传输规则,以便设备之间进行通信。以下是一些常见的串口通信协议以及如何自定义开发协议的一般步骤:ASCII 协议: 使用 ASCII 码来表示数据,通常以文本形式发送。每个字符代表一个命令或数据,常见的控制字符包括换行符、回车符等。二进制协议: 直接发送二进制数据,通常由特定的字节序列表示命令和数据。这种协议通常更高效,但也更难以调试和理解。Modbus 协议: 一种常见的工业通信协议,用于在设备之间进行数据传输和通信。Modbus 协议包括串口(R

2024-03-27 15:36:35 550

原创 阶段性问题记录

首先是反射,允许我们动态的去调用一些protected甚至private私有化的类或者方法,可以很大程度上满足我们的一些比较特殊的需求。---首先需要获得对应的class对象,然后获取反射执行的method队象,调用invoke方法。-----反射需要拆箱装箱---需要检查方法的可见性---需要校验参数。无法内联方法。Java 中的“hook”和“反射”是两个不同的概念,它们并不是同一个东西。反射是 Java 编程语言的一个特性,它允许在运行时动态地获取类的信息、调用类的方法、访问类的属性等。

2024-03-27 15:28:25 1176

原创 【串口开发】android 智能设备开发 知识笔记

我们可以通俗理解,out 就代表了标准输出(屏幕).如我们要输出信息到屏幕,既可以通过out来操作,但是,out 有没有提供输出信息到屏幕的接口,怎么办呢?很简单,我们创建Out对应的"输出流对象",然后通过"输出流"的write()等接口就可以输出信息到屏幕上去了.// 新建文件“file.txt”对应的FileInputStream对象// 获取文件“file.txt”对应的“文件描述符”// 根据“文件描述符”创建“FileInputStream”对象。

2024-03-21 14:42:09 1053

原创 android 事件分发笔记

分为 view.dispatchTouchEvent,---只有事件的处理逻辑----- ViewGroup.dispatchTouchEvent---实现了分发流程的逻辑。

2024-03-15 17:52:54 553

原创 android 怎么自定义view

onlayout---确定view大小----》所以继承ViewGroup必须要重写onlayout,确定子view。-------高两位表示UNSPECIFIED,EXACTLY,AT_MOST。-----》根据UNSPECIFIED,EXACTLY,AT_MOST来计算。----根据算法来控制的,比如view pageer就是父布局开始。------上面代码里的30,就是高两位是00,后面30位---》----是view里面的一个类---我们知道int 是32位。第一个参数,父亲给的,

2024-03-14 17:54:30 443

原创 手写flutter版本的eventbus

【代码】手写flutter版本的eventbus。

2024-03-13 17:54:54 108

原创 在Dart中,读取文件有两种常见的方式:使用 Stream 和使用 Future

【代码】在Dart中,读取文件有两种常见的方式:使用 Stream 和使用 Future。

2024-03-12 16:32:11 284

原创 给你一个二叉树的根节点 root , 检查它是否轴对称。

初始化时我们把根节点入队两次。每次提取两个结点并比较它们的值(队列中每两个连续的结点应该是相等的,而且它们的子树互为镜像),然后将两个结点的左右子结点按相反的顺序插入队列中。当队列为空时,或者我们检测到树不对称(即从队列中取出两个不相等的连续结点)时,该算法结束。我们可以实现这样一个递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q指针一开始都指向这棵树的根,随后 p右移时,q 左移,p 左移时,q右移。每次检查当前 ppp 和 qqq 节点的值是否相等,如果相等再判断左右子树是否对称。

2024-03-08 16:49:13 187

原创 删除排序链表中的重复元素 II---算法题

删除原始链表中所有重复数字的节点,只留下不同的数字。给定一个已排序的链表的头。

2024-03-08 16:25:30 110

原创 Java反射,动态代理。笔记

使用了ART下,加载方式发生了截然不同的变化,在安装时对 dex 文件执行dex2oat(AOT 提前编译操作),编译为OAT(实际上是ELF文件)可执行文件(机器码)。而如果在加载时,无法成功加载oat文件,仍然会尝试从原dex中加载,因此ART下,PathclassLoader 与 DexClassLoader 都能加载任意指定的dex,以及jar、zip、apk中的classes.dex。但是从原dex加载会导致无法dex2oat,加快加载速度,降低运行效率。两者完全一样,没区别。

2024-03-04 15:09:37 848

原创 View相关-View的创建流程

------------->scheduleTraversals(),handle发送处理消息,最后就会到run()方法里的 doTraversal()--------》performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);------------》performTraversals() //绘制View基本就在这里面了,遍历流程。

2024-02-29 17:43:45 589

原创 cas无锁编程的原理

----线程1 开始自循环,这时的A已经是11 了,V也=11.---》没有其他线程干预了---〉就开 始给A+1,成功---》线程1(A=11,B=12)----线程2--》提前变化了v中的值变成了11----〉线程1 提交更新---》比较。----线程1 ---把变量加1,这时旧的预期值是A=10,新的B=11。---没有线程阻塞的情况下实现变量同步。=A的值,提交失败。例如 --》在v中保存一个值 10,所以说,CAS属于乐观锁。

2024-02-23 11:59:22 218

原创 OkHttp 相关问题

OkHttp只会缓存GET请求的响应,在RFC7231中GET,HEAD和某些情况下的POST都是可缓存的,但是绝大多数的实现里只支持GET和HEAD的缓存,这是因为post做的一般是修改和删除的工作,所以必须与服务端交互,所以不能使用缓存。,资源第一次的请求时间和该值相加,计算出一个资源过期时间,再拿这个过期时间跟当前的请求时间比较,如果请求时间在过期时间之前,就能命中缓存,否则就不行。,它的值为一个绝对时间,如果发送请求的时间在expires之前,那么本地缓存有效,能够直接使用缓存。

2024-02-21 14:47:25 1057

原创 代码求-斐波那契数列的方法

3.为了优化空间复杂度,我们可以不用保存 f(x−2) 之前的项,我们只用三个变量来维护 f(x)、f(x−1) 和 f(x−2),你可以理解成是把「滚动数组思想」应用在了动态规划中,也可以理解成是一种递推,这样把空间复杂度优化到了 O(1)。4.随着 n的不断增大 O(n) 可能已经不能满足我们的需要了,我们可以用「矩阵快速幂」的方法把算法加速到 O(log⁡n)。2.一般情况下,我们使用「记忆化搜索」或者「迭代」的方法,实现这个转移方程,时间复杂度和空间复杂度都可以做到 O(n)。

2024-02-21 10:09:17 151

原创 为什么ViewStub是默认不显示的?是懒加载?

关于为什么默认不显示,看源码:直接设置了gone。

2024-02-20 14:52:20 244

原创 Android app启动优化 2

初始化 大量 sdk ---》DAG 有向无环图,--〉边,边的数量为入度 和出度--》拓扑排序。app启动配置设置修改,profiling,勾选start。on startup。---》他的多进程不是为了优化mutlidex的速度的,而是为了防止anr。启动优化一般是冷启动 优化。使用as日志display查看启动时间。将谷歌dex转zip的过程优化,才是他的主要优化内容。因为内存优化的抖动。官方说的是冷启动,温启动,热启动。3.网络请求,现在一般不影响了。2.加载第三方的sdk。

2024-02-19 14:02:33 330

原创 App启动优化笔记 1

APP进程:启动后立刻去和ams通信,把app自己的binder给到ams。---》再由ams使用这个app binder触发app的整个生命周期的执行。这个问题的可能原因:第三方的组件在application初始化时可能会产生message消息,抢在activity的oncreate之前。因为Manif的解析是在app安装和手机重启的时候的。所以点击启动的时候pkms 是有图片的。zygote进程:收到消息后,fork新的进程,---》app进程启动。1,开子线程,线程池,用子线程去启动。

2024-02-18 17:32:53 595

原创 binder笔记

--》ServiceManager是真正的提供者。----》而且binder的通信会创建单独的线程去完成。驱动发送ioctl消息 ----》有一个loop的callback(BinderCallback)socket---〉C/S 模式,有一个读,一个写两个缓存区,一次socket两次拷贝。--->the_context_object-->BBinder的transact。内存共享 ---》速度快,性能最好。管道 -----》管道文件, 写入读出。消息对列 ----》是在内核空间的消息队列表。

2024-02-18 11:59:18 325

原创 IdleHandler的简单认识

是 Android 中的一个机制,用于在应用程序主线程空闲的时候执行一些额外的任务。主线程的空闲时间通常是在处理完当前的 UI 事件和消息队列后,等待下一个事件到来之前的时间段。适用于一些不紧急、不影响用户体验的后台任务。当主线程没有其他紧急的任务需要执行时,中注册的任务可以被执行。这样可以在应用程序主线程的空闲时间执行一些轻量级的工作,而不影响用户交互。

2024-02-04 15:35:39 554

原创 什么是epoll机制

epoll是一种 I/O 事件通知机制,最初出现在 Linux 操作系统中,用于高效地管理大量的文件描述符(sockets、files、pipes 等)。它是 Linux 下的一种 I/O 复用机制,类似于 BSD 的kqueue和 Solaris 的devpoll。从阻塞---

2024-02-04 14:00:52 401 1

原创 【在不同线程中去执行同一个handler消息事,如何保证线程安全】

在不同线程中去执行同一个handler消息事,如何保证线程安全.

2024-02-04 10:38:37 231

原创 HandlerThread原理和超级细节

notifyAll()和wait不是一一对应的。wait会立刻交出锁,立刻执行,但是notifyALL通知 wait等到锁锁里的内容完成。其中,getlooper()如果先触发,进入synchronized代码段后,回用while循环判断,进行wait()等待。notifyAll()对所有线程通知。必须保证m looper非空。上面的两段代码可知 HandlerThread 是互斥的。notifyAll() 通知挂起的线程---wait结束。wait 是挂起,释放对象锁。sleep是不会释放对象的。

2024-02-04 10:26:37 311

原创 Kotlin 的 Flow 简单使用

当使用 Kotlin 的 Flow 处理异步数据流时,可以遵循以下步骤。Flow 提供了一种声明式、异步和可组合的处理异步数据的方式。

2024-02-02 10:14:54 1488

原创 一个线程可以有几个handle?

1.一个线程可以创建多个handle。从类的角度,handle类可以在任何activity创建任意个handle。从handle是通信机制的角度来说,一个线程就只允许有一套handle通讯机制方案。所有的创建的多个handle,都是最终到一个loop里面去。2.但是一个线程只能有一个自己的loop。

2024-01-26 16:41:07 161

flutter版本仿微信界面 完美运行

fluter版本模仿微信界面的布局和样式。 高级ui显示。 适合小白入门。

2024-03-22

超轻松的取色器

完美取色,一键完成

2016-07-25

XMPP协议工具openfire_3_10_3

xmpp协议 XMPP协议工具openfire_3_10_3。

2016-02-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除