- 博客(101)
- 收藏
- 关注
原创 算法题:合并有序数组
在合并两个有序数组的场景中,逆向双指针法是最优的选择,因为它既不需要额外的空间(除了几个指针变量),又能达到 O(m+n) 的时间复杂度。如果空间复杂度不是主要考虑因素,使用额外数组的双指针法或直接合并后排序的方法也是可行的。然而,在追求高效和节省空间的场景下,逆向双指针法通常是首选。
2024-09-30 21:22:10
432
原创 算法题:反转数组
虽然不常见,但你可以通过自定义迭代过程来反转数组,这通常涉及到更复杂的逻辑,并且效率可能不如双指针法。对于大多数情况,双指针法是反转数组的首选方法,因为它既简单又高效。递归法虽然优雅,但在处理大数据集时可能不如迭代法高效。使用方法则适用于已经在使用列表结构的情况。自定义迭代方法通常不是首选,除非你有特殊的需求或想要练习算法设计。
2024-09-29 17:33:46
403
原创 算法题:LRU
LRU(Least Recently Used,最近最少使用)算法是一种常用的页面置换算法,用于管理缓存中的数据,以保证缓存中的数据都是最近被访问过的。这种算法通过维护一个数据项的访问历史来工作,从而当缓存空间不足时,可以移除最长时间未被访问的数据项,以便为新的数据项腾出空间。
2024-09-28 20:49:15
515
原创 算法题:用队列实现一个链表
入队操作在队列的尾部添加新元素,而出队操作则移除并返回队列头部的元素。如果队列为空,则出队操作会返回。来分别跟踪队列的前端和后端,从而实现了队列的基本操作:入队(
2024-09-27 21:26:45
287
原创 算法题:链表中是否存在环
使用快慢指针法(Floyds Tortoise and Hare Algorithm),也称为龟兔赛跑算法。如果链表中存在环,那么快慢指针最终会在环内相遇;如果链表中不存在环,那么快指针会先到达链表末尾(设置两个指针,一个快指针(每次移动两步)和一个慢指针(每次移动一步)。:给定一个链表,判断链表中是否有环。
2024-09-26 22:20:43
368
原创 Android Bitmap加载问题
是Android系统中用于设置图片解码时参数的类,通过配置这个类的属性,可以控制图片的加载方式、颜色配置、是否复用已有Bitmap等多种行为。以下是一个完整的代码示例,该示例展示了如何根据ImageView的目标大小来加载并调整SD卡上图片的大小,然后将其显示在ImageView中。为true的方式解码图片,仅获取其宽高信息,然后根据目标尺寸计算出一个合适的。值,最后使用这个值重新解码图片,得到缩放后的Bitmap对象。类本身并不直接提供方法,它的作用主要是通过设置其属性来影响。的decode方法的行为。
2024-09-25 20:47:11
872
原创 Android应用程序启动与资源加载
在Android系统中,AMS(Activity Manager Service)扮演着核心角色,负责管理应用程序的生命周期和进程调度,包括启动应用进程等关键操作。下面将详细解析AMS启动应用进程时涉及的第一个线程、代码和资源的加载过程,以及R.id.xx的加载机制。
2024-09-25 17:55:13
980
原创 Android常见三种设计架构
(注意:MVVM在Android中通常与数据绑定库如Data Binding或第三方库如LiveData, ViewModel等结合使用):复杂UI逻辑和大量业务逻辑的应用,需提高可测试性和可维护性。:数据驱动的应用,如响应式UI,双向数据绑定等。:简单的应用,视图和控制器职责明确。
2024-09-24 23:11:15
1005
原创 Android代码调试与调优指南
通过深入理解Android架构和性能瓶颈、掌握高级调试技术、实施有效的代码优化策略、针对OOM和ANR进行深入排查与调优、实践CI/CD流程、优化版本控制与配置管理以及加强安全与隐私保护等措施,开发者可以显著提升Android应用的稳定性和性能表现。在Android应用开发中,代码调试与调优不仅是确保应用稳定运行、提升用户体验的必要环节,也是开发者专业技能的重要体现。随着Android系统版本的更新和硬件设备的多样化,开发者需要掌握更加全面和深入的调试与优化技术。
2024-09-24 22:56:03
1251
原创 Android内存优化
在Android中,内存泄漏通常发生在长生命周期对象(如Activity、Fragment等)持有短生命周期对象(如Context、View等)的强引用时。然而,每个VM的内存大小是有限的,因此内存优化成为应用开发中的重要环节。弱引用是一种不会阻止其引用的对象被垃圾回收器回收的引用类型。在Android开发中,弱引用常用于解决由长生命周期对象持有短生命周期对象的强引用所导致的内存泄漏问题。总之,弱引用是解决Android内存泄漏的有效工具之一,但使用时需要谨慎,并确保理解其工作原理。
2024-09-24 22:49:17
700
原创 Android性能优化与调优深度解析
Android性能优化不仅是技术层面的挑战,更是对用户体验和产品质量的直接体现。随着智能手机功能的日益强大和用户对应用性能要求的不断提高,如何使Android应用在多样化的硬件环境中保持高效、稳定、流畅运行,成为了开发者必须面对的重要课题。Android性能优化是一个涵盖广泛领域的综合工程,包括但不限于内存管理、布局优化、数据加载、启动速度等多个维度,其核心目标是在确保应用功能完整性的基础上,提升应用的响应速度、降低资源消耗、减少卡顿和崩溃现象,从而为用户提供更为优质的使用体验。
2024-09-24 22:44:35
873
原创 Android内存泄漏三:对比内存溢出
内存泄漏是指程序中已动态分配的堆内存由于某种原因未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。其特征是程序使用内存总量持续增加,直到程序崩溃或者系统强制关闭。
2024-09-24 22:38:11
410
原创 Android 内存泄漏二:View.post
方法在 Android 开发中经常用于在 UI 线程上执行代码,尤其是当需要在某个视图的绘制或布局操作完成后立即执行某些操作时。这个方法确实与内存泄漏的潜在风险有关,但主要是基于其如何被使用,而不是方法本身直接导致的。
2024-09-24 22:35:39
889
原创 Android 内存泄漏一:Handler
在Android开发中,Handler的内存泄漏是一个常见问题,尤其是当它与Activity、Fragment或其他具有生命周期的组件一起使用时。Handler内存泄漏的主要原因是它可能会持有对其外部类的隐式引用,通常是因为它在内部类中创建,而这个内部类又持有其外部类的引用。
2024-09-24 22:29:20
1245
原创 Android Crash
*** 当给定线程由于给定的未捕获异常而终止时调用此方法。* Java 虚拟机将忽略此方法引发的任何异常。* @param t 导致异常的线程* @param e 未捕获的异常*/
2024-09-24 22:23:39
1111
原创 Android ANR
ANR是指应用程序在特定时间内未能对用户的输入或系统事件作出有效响应。Android系统通过ActivityManagerService(AMS)和WindowManagerService(WMS)等系统服务来监控应用程序的响应时间,一旦超过预设的时间阈值,就会触发ANR。
2024-09-24 22:22:40
1054
原创 算法题:用数组实现一个栈
方法的实现,这些方法分别用于检查栈是否为空、是否已满,以及获取栈顶元素但不移除它。这些方法在栈的实现中非常常见,并且对于栈的操作来说非常有用。当然,以下是对您提供的。在这个类中,我添加了。
2024-09-24 21:30:08
205
原创 算法题:数组中的第K个最大元素
将数组中的元素依次加入最小堆中,当堆的大小超过K时,就弹出堆顶元素(即当前最小的元素)。最后,堆顶元素即为第K个最大的元素。快速选择通过选择一个“枢轴”(pivot)元素,将数组分为两部分,一部分包含所有小于枢轴的元素,另一部分包含所有大于枢轴的元素,然后递归地在包含第。之后,只有当遇到比堆顶元素还要大的元素时,堆顶元素才会被移除,新元素才会被加入堆中,从而保持堆中始终有。实际上,在填充堆的初始阶段,堆的大小会随着元素的加入而增长,直到达到。这样,堆顶元素将始终是最大的元素,而你需要找到的是第。
2024-09-23 21:25:20
763
原创 算法题:字符串转整数
(0-9)加上去都会导致溢出。然而,为了代码的完整性和清晰性,我还是保留了这部分注释和逻辑。但在实际执行中,只需要检查正数范围溢出即可,因为负数范围溢出在Java的。范围的处理只考虑了正数的情况。我添加了对负数范围的检查,但实际上在Java中,由于。表示中会自动处理(尽管结果不是预期的负数,但符合Java的溢出行为)。),所以通常我们不需要显式地检查负数溢出,因为一旦。没有直接的“下一个更小的数”(因为。注意:在原始代码中,对于超出。
2024-09-22 11:52:07
145
原创 Android HelloHarmony项目入门
OpenHarmony应用项目遵循模块化的架构设计原则,其中各个模块负责不同的功能和职责。这样的基础项目,虽然结构相对简单,但同样遵循模块化设计,确保代码的可维护性和可扩展性。
2024-09-21 17:14:37
478
原创 Android性能分析工具:Profiler
准备开发环境连接设备或配置模拟器加载并运行项目启动Profiler配置分析选项执行分析解读数据优化与迭代记录与分享启动CPU分析器执行并记录分析观察CPU使用情况分析火焰图识别并优化问题验证优化效果
2024-09-21 16:06:03
1180
原创 Android性能分析工具:Systrace
Systrace是Android性能分析的主要工具之一,它能够收集和检查设备上运行的所有进程的计时信息,帮助开发者分析并优化应用性能。
2024-09-21 16:01:24
1503
原创 Android 系统裁剪和定制
Linux内核层:提供核心系统服务,如硬件驱动、文件系统、网络协议等。这是Android系统的基础,确保了硬件设备的正常运作。硬件抽象层(HAL):为Android系统和硬件设备之间提供了一个标准接口,使得上层软件无需关心硬件的具体实现细节。这提高了系统的可移植性和可扩展性。系统运行库层Android运行时(ART/Dalvik):Android 5.0之后默认使用ART(Android Runtime),之前版本使用Dalvik虚拟机。ART通过预先编译应用程序代码为机器代码,提高了运行效率。
2024-09-20 18:36:42
2361
原创 AOSP开发:移除和添加预置应用
在Android Open Source Project (AOSP) 中,添加或移除预置的应用(包括 APKs、so 库、jar 包、bin 文件以及配置文件等)主要涉及到对 Android 构建系统的修改,特别是 Android.mk 文件、Makefile 文件、Android.bp 文件(如果使用 Soong 构建系统)以及设备特定的配置文件如 device.mk 或 AndroidProducts.mk。
2024-09-20 09:39:08
1094
原创 Android Settings访问和修改系统设置
在Android的AOSP(Android Open Source Project)框架开发中,以及是常用的API,它们允许应用(包括系统应用和第三方应用,但通常需要适当的权限)访问和修改系统设置。这些设置可以包括各种系统属性、偏好设置等。然而,需要注意的是,从Android 6.0(API 级别 23)开始,对于修改系统设置增加了更严格的限制,尤其是对于那些可能影响到用户隐私或安全性的设置。
2024-09-19 15:22:36
2771
原创 算法题:字符串相加
这种方法避免了将字符串转换为整数进行相加可能导致的溢出问题,并且能够高效地处理大数相加的情况。来高效地构建结果字符串,并从字符串的末尾(即整数的低位)开始遍历,逐位相加,并处理进位。这段代码实现了两个以字符串形式表示的非负整数的相加。转换为字符串并返回。
2024-09-19 10:27:29
228
原创 Android APK反编译原理和文件结构
通过dex2jar等工具,可以将DEX文件转换为JAR文件,然后使用Java反编译器(如JD-GUI、CFR等)将JAR文件反编译为Java源代码或.smali文件(一种Android虚拟机所使用的寄存器语言)。总之,APK反编译的目的是将APK文件中的不可读内容转换为可读形式,以便开发者或分析人员能够更深入地了解应用的内部结构和实现原理。这些文件是Android虚拟机所使用的寄存器语言编写的,虽然不如Java源代码直观,但可以用于修改DEX文件的内容。反编译后,该文件以文本格式呈现,便于阅读和修改。
2024-09-17 22:46:30
558
原创 Android APK构建流程
APK的构建流程涉及资源处理、AIDL接口转换、Java源代码编译、DEX文件生成、APK打包、签名。以及Zipalign优化等多个步骤,每个步骤都确保了APK的完整性和高效性。
2024-09-17 22:45:09
633
原创 手车互联二:scrcpy
在Android系统中,使用ADB(Android Debug Bridge)命令来启动特定应用于指定的上,以及使用这样的工具来屏幕镜像或控制特定显示设备的操作,都涉及到了Android的多显示支持(Multi-Display)技术。下面将分别展开描述这两种操作的技术原理。命令示例:技术原理:ADB通信:首先,ADB通过USB或网络(如TCP/IP)与Android设备建立连接。这个连接允许用户发送命令到设备并执行。Activity Manager(am):命令是调用Android的Activity Ma
2024-09-17 22:34:19
882
原创 手车投屏一:ICCOA
ICCOA Carlink实现手机桌面投屏到车机屏幕的底层原理主要涉及无线通信技术、屏幕共享技术和用户交互技术的综合运用。
2024-09-17 22:30:56
2906
原创 计算机基础四:三次握手和原因
在TCP协议中,三次握手的发起连接既可以由客户端发起,也可以由服务端发起,但在实际应用中,通常由客户端发起连接请求更为常见。这个过程确保了两端都知道了对方不再发送数据,从而安全地关闭了连接。这三个步骤完成后,TCP连接就成功建立了,双方可以进行数据传输。
2024-09-15 21:44:30
346
原创 计算机基础三:TCP、UDP 与 Socket
总结来说,Socket是实现TCP和UDP通信的编程接口,而TCP和UDP则是确保数据在网络中按特定方式(可靠或不可靠)传输的协议。Socket(套接字)是网络通信的基石,是支持TCP/IP协议网络通信的基本操作单元。它包含了进行网络通信所必需的五种信息:协议、本地IP地址、本地端口号、远地IP地址、远地端口号。Socket通过为应用程序与TCP/IP协议交互提供接口,使得应用层可以和传输层区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
2024-09-15 21:40:51
978
原创 计算机基础二:HTTP和HTTPS
方法:仅支持GET,用于请求页面。传输内容:纯文本,不支持请求头。连接状态:单次请求后关闭连接。HTTPS在HTTP基础上增加SSL/TLS协议,提供数据加密和身份认证,保障传输安全。
2024-09-15 21:35:27
551
原创 计算机基础一:get和post
GET和POST是HTTP协议中最常用的两种请求方法,它们在用途、数据传输方式、安全性等方面存在显著差异。GET方法主要用于请求数据,而POST方法主要用于提交数据。在选择使用哪种方法时,应根据具体的应用场景和需求来决定。
2024-09-15 21:32:21
288
现代应用软件开发框架文件
2024-09-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人