- 博客(79)
- 收藏
- 关注
原创 C_内存 内存地址概念
内存地址是变量的位置标识,而值是该位置中存储的内容。修改值只是改变了内容,而位置本身不会发生变化。指针是C语言中直接操作内存的核心工具。指针本质上是一个变量,它存储的是另一个变量的内存地址。计算机的内存(RAM,随机存取存储器)是用来存储程序运行时的数据和指令的地方。这些地址从0开始编号。变量在内存中的内存地址。
2025-04-11 21:56:19
745
原创 C基础笔记_指针专题
C 和 C++ 是系统级编程语言,它们的设计目标之一是允许开发者直接与硬件交互并高效地管理资源。指针提供了极高的效率和灵活性,特别是在性能敏感的应用中。mallocfreenewdeleteJava 和 Python 中也有类似的功能(如对象引用和垃圾回收),但这些功能是由运行时环境自动管理的,程序员无法直接干预。指针是实现复杂数据结构(如链表、树、图等)的核心工具。在 Java 中,类似的结构可以通过对象引用来实现,但底层的内存管理和指针操作是由 JVM 自动完成的。
2025-04-09 21:03:25
472
原创 C基础笔记20250325
define由于宏仅是文本替换,在调试时查看变量值时无法直接看到宏的名字,这可能使调试更加困难。宏的作用范围从定义点开始直到文件结束或遇到#undef指令为止,不具备块级作用域的概念。宏是全局性的,除非特别限制在一个文件内通过条件编译实现。适合用于定义简单的常数值,特别是当这个值需要被用作数组大小、case标签或其他不允许有变量的地方。也常用于条件编译。const。
2025-03-28 20:09:31
536
原创 定时器AlarmManager
AlarmManager常常用于需要周期性处理的场合,比如闹钟提醒、任务轮询等等。并且定时器来源于系统服务,即使App已经不在运行了,也能收到定时器发出的广播而被唤醒。AlarmManager是Android提供的一个全局定时器,其使用范围要大于Timer方式。因为Timer方式采用Thread通信,所以只适用于线程间通信,并且生命周期也有限。如果在Activity中定义Timer,那么Activity页面销毁后,定时器也失效了;
2024-10-14 22:17:21
551
原创 Android架构--MVVM
具体到Android开发中,开发架构就是描述三者之间的关系和实施:视图层:用户界面,即界面的展示、以及交互事件的响应。逻辑层:为了实现系统功能而进行的必要逻辑。数据层:数据的获取和存储,含本地、server。
2024-10-07 21:15:06
974
原创 感知生命周期的数据组件--LiveData
LiveData是Android中用来进行数据监听的类。由于一些限制,现在官方推荐使用Flow进行数据监听。在ktx拓展包中,使用LiveData.asFlow()可以很方便的将LiveData转换为Flow。Flow.asLiveData()也可以很方便的将Flow转换为LiveData。
2024-08-08 22:11:39
491
原创 生命周期组件-Lifecycle
假如我们想要监听的类(不是Activity)没有实现,那么就没有办法直接获取LifeCycle。所以就需要进行自定义。) {
2024-08-06 15:56:11
565
1
原创 VideoView
setOnCompletionListener(MediaPlayer.onCompletionListener l):设置监听播放完成的事件。void setVideoURI(Uri uri):以Uri的方式设置视频源,网络Uri或本地Uri。void stopPlayback():停止播放,调用resume()可以从头重新播放。int getDuration():获取当前播放视频的总长度,单位为毫秒。void pause():暂停,调用start()可以继续。void start():开始播放。
2024-08-04 21:01:46
237
原创 Activity
当调用到onNewIntent(intent)的时候,需要在onNewIntent()中使用setIntent(intent)赋值给Activity的Intent.否则,后续的getIntent()都是得到老的Intent。,如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。如果栈中不存在该实例,将会创建新的实例放入栈中。
2024-07-27 08:34:19
1095
原创 Service
通过方法启动,此服务可以在后台一直运行,不会随启动组件的消亡而消亡。但是,此种启动模式只能执行单一操作,并且无法返回结果给调用方,主要常用于网络下载、上传文件,播放音乐等。通过启动模式启动的Service,如不主动关闭,Service会一直在。首次调用完startService函数后,Service1的onCreate和onStartCommand函数会依次执行,表示服务正式启动;
2024-07-22 20:22:55
1118
原创 git 代码回退 soft hard区别
git hard 回退 会清除掉 你当前修改的所有文件代码内容 或添加的新文件 把当前文件恢复到没有修改前的状态。git soft 回退 不会清除掉 你当前修改的所有文件代码内容 或添加的新文件。一:只是本地修改提交到本地版本库仓库,代码如何回退。把当前文件恢复到当时修改时的状态。
2024-06-29 17:25:41
135
原创 Kotlin 协程与 Retrofit
Kotlin 协程与 Retrofit | Jinyan's BlogKotlin 协程与 Retrofit | Jinyan's Blog
2024-06-09 21:11:04
158
1
原创 补篇协程:协程(Coroutine)里使用suspend函数实现异步IO操作
因此,每次异步传输的信息都以一个起始位开头,它通知接收方数据已经到达了,这就给了接收方响应、接收和缓存数据比特的时间;按照惯例,空闲(没有传送数据)的线路实际携带着一个代表二进制1的信号,异步传输的开始位使信号变成0,其他的比特位使信号随传输的数据信息而变化。例如在键盘上数字“1”,按照8比特位的扩展ASCII编码,将发送“00110001”,同时需要在8比特位的前面加一个起始位,后面一个停止位。使用了异步IO,在发起IO请求到实际使用数据这段时间 内,程序还可以继续做其他事情。
2024-06-08 22:19:20
498
1
原创 Java IO流详解
IO流是基于流的概念,它将数据的输入和输出看作是一个连续的流。数据从一个地方流向另一个地方,流的方向可以是输入(读取数据)或输出(写入数据)。以字节为单位读写数据,适用于处理二进制字节数据,如图像、音频、视频等。通过IO流可以进行网络数据的传输和接收,如Socket通信、HTTP请求等。通过IO流可以读取和写入文件中的数据,如读取配置文件、写入日志等。通过IO流可以将数据读取到内存中,或将内存中的数据写入到数据库中。IO流的原理是通过流的管道将数据从源头传输到目标地。:从字节数组中读取字节数据的类。
2024-06-08 21:41:37
852
1
原创 仿作用域函数with自定义各种myWith1/2/3/4/5/6/7(...)函数
【代码】仿作用域函数with自定义各种myWith1/2/3/4/5/6()
2024-06-04 14:46:30
118
原创 使用匿名labmda表达式对一个函数的参数是个函数类型的具体实现时的 双向回调数据 双向处理业务逻辑
双向回调数据 双向处理业务逻辑在android的应用场景就是:Activity界面的RecyclerView与Adapter双向的相互传递数据处理业务逻辑。
2024-05-28 20:20:44
247
原创 二次重温协程
Job是协程的句柄。如果把门和门把手比作协程和Job之间的关系,那么协程就是这扇门,Job就是门把手。意思就是可以通过Job实现对协程的控制和管理。Job我们可以认为他就是一个协程作业是通过生成的,同时它运行一个指定的代码块,并在该代码块完成时完成。我们可以通过isActive来获取到Job的当前状态。Deferred 继承了 Job 接口 , 是 Job 接口的子接口;机翻文档 , 仅供参考;/*** 定义协同程序构建器的开始选项。
2024-05-02 22:08:07
843
原创 函数的参数命名和默认参数
在Kotlin中,函数可以有多个参数,记住参数的顺序或者仅靠位置理解他们的作用可能会很具有挑战性,特别是对于接受多个参数或者有相同类型参数的函数。命名参数通过允许开发者指定传递给函数的每个参数的名称来解决这个问题。
2024-04-15 15:22:56
311
原创 安全调用(?.) Elvis运算符(?:)
安全调用运算符允许开发者在可能为空的对象上安全地访问属性或调用方法。如果对象不为空,操作就会被执行;如果对象为空,则跳过操作,并返回null而不是抛出NullPointerException。如果text不为null,那么length将被赋予text的长度;如果text为null,那么length也将为null,全部都不会报NullPointerException。
2024-04-15 14:47:32
475
原创 Android 内存优化&内存泄漏处理
匿名内部类的泄漏原因:匿名内部类会隐式地持有外部类的引用.当外部类被销毁时,内部类并不会自动销毁,因为内部类并不是外部类的成员变量,它们只是在外部类的作用域内创建的对象,所以内部类的销毁时机和外部类的销毁时机是不同的,所以会不会取决与对应对象是否存在被持有的引用.
2024-02-24 19:14:46
1680
原创 协议基础笔记
串口通信是Android智能硬件开发所必须具备的能力,市面上类型众多的外设基本都是通过串口进行数据传输的,所以说不会串口通信根本就做不了智能硬件开发。串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节。串口可以在使用一根线(Tx)发送数据的同时用另一根线(Rx)接收数据。
2024-01-02 21:04:37
985
原创 Android 串口协议
CHKSUM : 是 校 验 .CHKSUM = 0 xor Packet[0] xor Packet[1] xor …而接受数据再发出回应数据包的通讯端点为从机(Slaver)(主控板) ,Slaver 发出的数据包被称为应答数据包。发送数据的通讯端点为主机(Master)(Android), Master 发出的数据包被称为请求命令数据包。Packet[N]表示即将发送的当前数据包的第 N 个字节去除 CHKSUM 字段的其他所有部分。请求命令数据包与应答数据包必须是成对出现,每个应答对应一个请求。
2024-01-02 21:04:27
872
原创 arkTS 基础知识
需要加 @Component export 关键字不需要加this. 调用放在类外(需要加@Builder function关键字) (每个组件都能调用)需要加this.调用封装:在Index2类里面(不能加function关键字) (当前这个组件自己都有的 别的组件不能调用)加关键字@Styles装饰器封装的全局公共样式函数(@Styles function)(封装在类外)或者局部公共样式函数(@Style)(封装在类里面)
2023-12-23 16:31:03
1546
原创 jni之as cmakeList配置学习
Java Native Interface(Java 本地编程接口),一套编程规范,它提供了若干的 API 实现了 Java 和其他语言的通信(主要是 C/C++)。Java 可以通过 JNI 调用本地的 C/C++ 代码,本地的 C/C++ 代码也可以调用 java 代码。native代表当前程序运行的本地环境,一般指windows/linux,而这些操作系统都是通过C/C++实现的,所以native通常也指C/C++语言,(也可在其他目录下创建,在第二点会配置这个路径);的名字修改 fmf_jni。
2023-10-18 22:10:50
382
原创 cmake下的abiFilters和ndk下的abiFilters的区别
ndk下的abiFilters是只将哪个类型so库打包进apk安装包里,和生成什么类型的so库没有关系。cmake下的abiFilters是和编译native代码生成什么类型的so库有关。
2023-10-09 17:07:49
424
原创 关于 ndk { abiFilters ‘arm64-v8a‘ } 与splits { abi { include “arm64-v8a“}}的互斥冲突
apk包,通知,从 2019 年 8 月 1 日开始,您在 Google Play 上发布的应用必须支持 64 位架构。64 位 CPU 能够为您的用户提供更快、更丰富的体验。
2023-10-08 15:08:55
1346
原创 跟着官方学jni&ndk
Android Gradle 插件 4.2.0 及更高版本可在您首次构建项目时自动安装所需的 NDK 和 CMake,前提是您已预先接受其二者的许可。如需向 CMake 构建脚本添加库的多个 ABI 版本,而不必为库的每个版本编写多个命令,您可以使用。如果您的原生源代码文件还没有 CMake 构建脚本,您需要自行创建一个,并在其中包含适当的 CMake 命令。使用 Android Studio 3.6 或更高版本时,如果您不指定版本,Android Gradle 插件会选择已知兼容的版本。
2023-09-21 22:27:27
456
原创 NDK基础
Android.mk:在 Android 上编译需要的配置文件,相当于 build.gradle,详细细节后面会讲到。各个平台架构的区别就是指令集不一样,浮点运算能力不一样,按照上面排列的顺序,浮点运算能力运行从低到高。需要一一对应,如果没有一一对应,外部模块调用了接口,编译的时候会提示找不到方法。存在的意义,方便代码不用重复编译, 最终为了生成。库对外开放的接口声明。这句代码代表着,使用这个类之前都会去加载。合并到一块的集合,经常在编译。所以接下来我们要构建。为了减少包体大小只接入。
2023-09-20 16:00:46
2061
原创 C语言指针详解 函数指针 指针函数
C语言中,定义变量时,在变量名 前 写一个 * 星号,这个变量就变成了对应变量类型的指针变量。必要时要加( ) 来避免优先级的问题。引申:C语言中,定义变量时,在定义的最前面写上typedef ,那么这个变量名就成了一种类型,即这个类型的同义词。
2023-09-13 18:34:53
246
原创 如何理解C++中的void*
1.void*是一个过渡型的指针状态,可以代表任意类型的指针,取值的时候需要转换为具体类型才能取值。其是处于数据类型顶端的状态:2.void* 使用赋值运算符“=”赋值时,只能将具体类型赋值给void星,不能将void*赋值给具体类型。3.void*一般作为参数或者返回值来实现泛型编程,但是C++中一般考虑使用模板编程来实现。
2023-09-08 15:41:30
1321
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人