自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 概念:java 同步

是 Java 中的关键字,用于修饰变量,用于确保变量的可见性。当一个变量被 volatile 修饰时,对该变量的写操作会立即被其他线程可见,保证了多个线程之间对该变量的可见性。由于多线程环境下的竞态条件、内存可见性问题和线程安全性问题会导致程序的不确定性和错误,因此需要通过这些机制来保证多线程程序的正确性。这些是 Java 中用于处理多线程并发情况的关键字和类,它们的存在是为了解决多线程并发访问共享资源时可能出现的竞态条件(Race Condition)、内存可见性问题和线程安全性问题。

2024-04-30 11:50:53 205

原创 java 运行时数据区

除了以上几个主要的运行时数据区域外,Java 虚拟机还可能会包括一些其他的内存区域,如直接内存(Direct Memory)等。这些内存区域共同组成了 Java 虚拟机的运行时数据区域,在执行 Java 程序时为程序提供了内存空间。Java 运行时数据区域是 Java 虚拟机 (JVM) 在运行 Java 程序时所使用的内存空间的抽象表示。

2024-04-30 11:32:21 264 1

原创 Caused by: org.gradle.api.GradleException: ‘compileDebugJavaWithJavac‘ task (current target is 1.8)

这个异常的核心原因是Java和Kotlin编译任务目标的Java版本不一致。具体来说,任务(Java编译任务)的目标版本是 Java 8 (1.8),而任务(Kotlin编译任务)的目标版本是 Java 17 (17在一个项目中,Java和Kotlin的编译任务应当设置为相同的JVM目标版本,以确保兼容性和避免潜在问题。为了修复这个问题,你需要在项目的文件中为Java和Kotlin设置相同的JVM目标版本。

2024-04-24 19:35:50 609 2

原创 Java 静态、非静态内部类

这种设计决策允许非静态内部类能够更加紧密地与外部类的实例集成,而静态内部类则提供了更多的灵活性和独立性,有助于避免潜在的内存泄露问题,特别是在生命周期管理复杂的应用场景中,如Android开发。非静态内部类是与外部类的实例紧密绑定的。每个非静态内部类的实例都需要在其外部类的实例的上下文中被创建,因此,非静态内部类隐式地持有一个指向创建它的外部类实例的引用。这种设计意味着静态内部类可以在没有外部类实例的情况下单独存在,它们更像是外部类的一个静态的辅助类,可以在任何地方被使用,而不会影响外部类实例的生命周期。

2024-04-24 14:14:54 304

原创 Java 线程池

这时,即使有一个线程在等待IO操作,拥有一个额外的线程可以确保CPU在这种情况下仍然有工作可做,避免因为IO等待而造成的CPU空闲。因此,通常线程数不会超过CPU核心数太多,CPU的数量+1是一个折中的选择。:当线程执行的任务主要是计算密集型的,你希望有足够的线程来保持所有CPU核心都在工作。在Android开发中设置线程池的核心线程数为CPU的数量加1是一种常见的经验法则,这种设置旨在为常见的任务类型提供一个合理的性能平衡。方法可以获取当前设备的CPU核心数,然后据此来决定线程池的核心线程数。

2024-04-24 14:11:59 399

原创 Android如何管理多进程

Android操作系统使用Linux内核,因此多进程管理是基于Linux的进程管理机制。

2024-04-24 14:06:13 435 4

原创 Android ContentProvider

在Android中,使用ContentProvider初始化SDK是一种常见的做法,因为ContentProvider是在应用启动时就被系统调用的组件,这使得它可以用作早期初始化代码的一部分。

2024-04-24 13:58:42 307 2

原创 文件多进程、多线程访问

处理多进程和多线程的文件读写操作需要确保对共享资源的访问是同步的,以防止数据竞争和不一致性。

2024-04-24 13:41:08 273

原创 Yonbuilder参考

Android自定义插件打包 社区问答。MarkDown指令使用。

2024-04-21 08:45:06 465

原创 统计:UTM

UTM 的全拼是 “Urchin Tracking Module”。UTM参数通常用在URLs中,用以跟踪来自不同来源、媒介或营销活动的网页流量。这种参数最初由Urchin软件公司开发,用于改进网页分析,Google收购了Urchin软件公司后,这些参数和逻辑被整合进了Google Analytics服务。通过在目标URL后添加这些UTM参数,营销人员和网站分析师能够更精确地跟踪用户通过不同广告或营销活动访问网站的方式。这些信息被用来分析效果和计算投资回报率(ROI)等关键指标,以优化和调整营销策略。

2024-04-20 18:33:42 208

原创 UML绘制

在Android studio 中自动生成类图。方法一:使用 Homebrew 安装。plantUML 在线编辑。processon官网。安装graphviz。

2024-04-20 18:29:09 390

原创 MVC、MVP、MVVM

MVC适合应用程序的初步架构,有着明确的分层策略,但在现代Web应用和移动应用中可能导致Controller变得过于复杂。MVP将所有的UI逻辑都放在了Presenter层,解决了MVC中Controller晦涩的问题,适于较复杂的界面逻辑处理。MVVM通过引入数据绑定,进一步减轻了View的负担,极大的提高了开发效率,尤其在构建大型前端应用时有显著优势。选取最合适的架构模式取决于具体项目的需求、团队的技术栈偏好以及预期的应用规模。

2024-04-20 00:27:37 665

原创 概念:模块化、组件化、插件化

在Android开发中,随着应用程序的功能越来越复杂,代码量剧增,开发、测试和维护的难度也相应提高。为了解决这些问题,模块化、插件化和组件化等架构设计理念被提出。虽然这些概念在日常开发中经常被讨论,但它们关注的焦点和解决的问题各不相同。

2024-04-20 00:18:38 949

原创 概念Android AMS

Android的Activity Manager Service(AMS)是负责管理整个系统中Activity生命周期、任务栈、应用启动等核心功能的系统服务。它通过系统级别的进程间通信(IPC)机制与应用程序组件交互,确保应用程序的行为符合Android的多任务处理逻辑和用户的预期。AMS是Android系统架构中的一个关键服务,它通过Binder IPC机制为上层应用程序提供服务。

2024-04-20 00:05:51 465 2

原创 Android Studio历史版本下载地址

hl=zh-cn。

2024-04-19 23:56:09 552

原创 java 反射的使用

可以获取类中声明的所有方法,包括私有的(private)、保护的(protected)、默认访问级别(package-private)的和公共的(public)方法。如果需要,创建或者获取一个实例:如果方法是实例方法,你需要一个类的实例来调用它。如果方法是静态的(static),则可以跳过这一步。方法在Java 9及其之后版本中已标记为过时,推荐方式是使用来自。而且,如果你要调用的方法是私有的,你需要在。若方法有参数,则需要提供参数的类型来获取。方法调用它,传入实例和所需的参数。

2024-04-19 08:36:56 228

原创 Android判断当前进程

【代码】Android判断当前进程。

2024-04-18 19:00:35 115

原创 Android 应用分配的内存大小是多少

Android应用的内存限制一般被称为“堆大小限制”(heap size limit),这是每个应用可用于其内存堆的最大内存量。在较旧的Android设备上,堆限制可能小到16MB或32MB,而现代设备的堆限制通常介于128MB到512MB或更高。不同的设备,尤其是有着不同RAM大小的设备,可能会为应用分配不同的最大内存数量。并不能保证系统一定会分配更多的内存,这只是向系统表明应用可能需要更大的内存堆,而系统会根据当前的内存使用情况来决定是否批准这一请求,且这通常只在大内存的设备上有实际效果。

2024-04-17 15:45:46 814

原创 AutoSize屏幕适配

Autosize 是 Android 上一种常用的第三方屏幕适配库,它基于一个简单却有效的原理工作,这个原理叫做 “今日头条屏幕适配方案”。:运行应用时,Autosize 会获取设备的实际屏幕尺寸(例如,设备实际宽度是 1080px),然后根据基准尺寸计算出一个缩放比例。例如,如果基准宽度是 360dp,并且设备宽度是 1080px,那么缩放比例将是 3(1080px / 360dp)。:由于 density 值被修改了,所有使用 dp 单位的布局和组件大小将会根据新的缩放比例自动缩放,适配屏幕。

2024-04-17 10:06:40 609

原创 MAC 终端命令

Command + Shift + . 显示隐藏文件夹环境变量路径 ~/.zshrc。

2024-04-17 09:53:47 1150

原创 概念: 类图、时序图

类图和时序图是统一建模语言(UML,Unified Modeling Language)中的两种不同类型的图表,分别用于显示系统中的类及其之间的关系,以及对象间交互的时间顺序。下面分别介绍它们的常用语法。

2024-04-17 09:45:18 320

原创 事件总线EventBus

EventBus 是一个 Android 和 Java 的发布/订阅事件总线库,它简化了组件间的通信,尤其是在活动、片段和后台线程中。它有助于减少复杂而易出错的依赖和生命周期问题。

2024-04-17 09:37:06 401

原创 JS两个按钮水平排列

要使两个按钮在水平方向上对半铺满,你可以使用CSS中的Flexbox布局或Grid布局。

2024-04-16 23:46:34 425

原创 Java 多线程可共享的资源?

然而,尽管这些资源是共享的,某些资源的访问可能需要通过同步机制(如互斥锁(mutexes)、读写锁(read-write locks)、信号量(semaphores)等)进行控制,以确保数据的完整性和一致性,避免线程安全问题。这里的堆内存指的是动态分配的内存,如通过。:打开的文件和网络连接由文件描述符(file descriptors)表示,这些描述符在同一个进程的所有线程之间是共享的。正确地管理这些可以共享和非共享的资源是并发编程的关键,并且开发者应当对这些概念有深入的理解,以避免引发并发相关的问题。

2024-04-16 23:08:26 336

原创 adb常用命令汇总

上述只是adb工具众多功能的一部分。在实际使用中,adb命令可以实现更多的高级功能,如模拟器管理、端口转发、备份和恢复设备数据等。为了充分利用adb能多提供的功能,可以通过查看adb的官方文档来获取更多信息和进阶命令。Android Debug Bridge (adb) 是一个多功能命令行工具,它允许你与连接的Android设备或在电脑上的Android模拟器进行通信。其中,KEYCODE为键盘码,例如,KEYCODE_HOME、KEYCODE_BACK等。

2024-04-16 23:03:34 225

原创 mac jd-gui安装

访问JD-GUI的官方网站(http://java-decompiler.github.io/)或直接到GitHub的发布页(https://github.com/java-decompiler/jd-gui/releases),下载最新版本的JD-GUI for macOS。JD-GUI是一个独立的图形化应用程序,你可以使用它来查看Java字节码对应的源代码。你需要将JD-GUI的图标拖动到应用程序文件夹中,这样JD-GUI就会被复制到你的应用程序目录,完成安装。下载完成后,你会得到一个。

2024-04-16 22:57:35 873

原创 mac apktool安装

你还需要一个执行脚本来运行Apktool。你可以从Apktool的GitHub仓库下载一个名为。命令在Mac上进行APK的反编译和重新打包了。记得使用Apktool时要确保遵守相关法律法规。在macOS上安装Apktool需要几个步骤。下载脚本后,需要将其变为可执行文件,并移动到系统路径中。如果看到了Apktool的帮助信息,那么表示Apktool已经成功安装。确保你的Mac上安装了Java。来检查Java是否已经安装。如果还没有安装,你可以从。通常你会下载一个jar文件,例如。下载并安装Java。

2024-04-16 22:57:01 804

原创 mac dex2jar安装

(依赖于你解压的文件夹中具体包含的脚本名)来验证是否成功添加到 PATH 中。如果你仍然遇到问题,请确保你遵循了正确的解压步骤,并正确地编辑了 PATH 环境变量。前往 dex2jar 的 GitHub 仓库(https://github.com/pxb1988/dex2jar)下载最新的发布版本,通常是一个 zip 文件。例如,在你的主目录下创建一个名为 “tools” 的文件夹,并解压 dex2jar 到这个目录。工具没有安装在你的系统中,或者没有被添加到系统的 PATH 环境变量中。

2024-04-16 22:56:20 733

原创 apk反编译

需要注意的是,反编译是一个复杂的过程,可能会遇到各种问题,尤其是如果APK被混淆处理过,那么反编译得到的代码可读性可能会很差。混淆(obfuscation)是一种代码保护措施,可以通过工具如ProGuard实现,它会修改源代码中的类名、方法名和变量名等,使得反编译后的代码难以理解。但是,需要注意的是,通常通过反编译得到的不是原始的Java源代码,而是反编译后的代码,这意味着它可能已经被转换成了类似于原始Java代码的形式,但不保证与原始代码完全一致,尤其是变量名和某些结构可能会有所不同。

2024-04-16 22:55:12 656

原创 使用代理会带来哪些问题

例如,如果代理可以帮助你实现清晰的模块分离和更好的维护性,这可能是值得的。在对性能有严格要求的场景下,比如游戏开发或高频交易系统,可能需要寻找更优化的解决方案。然而,如果代理方法是高频调用的,或者代理逻辑非常复杂,性能开销可能会变得显著。:代理模式通过在真实对象和调用者之间引入一个代理对象,增加了方法调用的层数。每次方法调用都需要经过代理对象,这意味着每个方法调用都会有额外的间接跳转。:对于动态代理,代理类是在运行时生成的,这个过程涉及到类的字节码生成和加载,这些操作相比直接使用现有类会有额外的开销。

2024-04-16 22:49:15 208

原创 Android 混淆模板

public *;

2024-04-16 22:43:18 593

原创 Android系统API 以及对应的版本号

Android系统的API级别(API Level)和版本号指的是Android操作系统不同发行版本的标识符。每个新的Android版本都有一个独特的API级别,这允许开发者编写能够在特定版本及其以上版本的设备上运行的代码。随着时间的推移,Android系统会继续发展,API级别和版本号也会相应更新。选择目标API级别时,开发者需要考虑他们希望支持的最低Android版本,以及如何使用新版本中引入的特性。了解特定的API级别和版本号对于确保应用程序兼容性和最佳性能非常重要。

2024-04-16 13:58:17 1953

原创 IntentService和Service区别

这是由于Android系统为了优化内存和电量消耗增加了对后台服务的限制。这些新的API提供了更灵活的后台任务调度能力,并更好地适应了Android系统的节能策略。在API level 30已被弃用,Google现在推荐使用。

2024-04-16 13:46:32 466

原创 概念:Android 虚拟机

这段内存空间是独立的,使得每个应用程序被隔离,以确保安全和稳定性。ART同样为每个应用程序提供独立的执行空间,但它使用预先编译(AOT,Ahead-Of-Time)的方式将应用的字节码转化为机器码,并在安装应用时进行这个过程,以提高运行效率。对每个Android应用程序启动一个新的DVM实例,每个DVM实例都有自己的内存空间,DVM负责执行.dex格式的字节码文件,这些文件是Java类文件转换而来的。Android中的Dalvik虚拟机(DVM)和Android运行时(ART)都是运行在内存中的。

2024-04-16 11:10:57 376

原创 Gradle常用命令

Gradle是一个强大的构建系统,用于自动化和管理构建过程,是许多Java、Android、C++和其他语言的项目的主流构建工具。在使用上述命令时,应该基于你的项目类型和构建脚本来选择合适的任务。这些是一些最基本和最常用的Gradle命令,Gradle的功能远不仅限于这些。要了解更多和深入的内容,可以查阅。)是推荐的启动Gradle的方式,因为它可以针对每个项目保证使用相同的Gradle版本,而不需要在每台构建平台上安装相同版本的Gradle。添加执行权限(在Unix-like系统上),使用命令。

2024-04-16 09:53:10 492

原创 小程序插件引入宿主的函数

如果你实在想要在开发阶段方便的使用宿主应用中的工具或库,你可以考虑复制你想使用的文件到插件的目录中再进行。这不是官方推荐的做法,并且不适用于生产环境,因为这样会导致代码重复和同步问题,推荐还是使用宿主应用的。这意味着宿主会显式地定义哪些方法是可以供插件使用的,并在一个特定的。,这将会触发错误,因为插件是不允许直接引用宿主应用目录下的文件。微信小程序的插件和宿主应用是独立的,插件无法直接通过。当需要在插件中使用宿主的某些方法时,必须通过宿主的。如果在插件中的代码尝试用。引用宿主应用中的文件。

2024-04-15 14:34:34 684

原创 Android IPC机制

Android中的应用通常运行在独立的沙箱环境中的进程里,由于安全限制,这些进程无法直接访问彼此的内存空间。在设计IPC通讯时,安全性是一个重要的考虑因素,因为不恰当的IPC实现可能使得应用容易受到恶意攻击,比如Intent劫持、Binder漏洞利用等。因此,应当始终采取相应的保护措施,如验证Intent的来源、使用权限保护Content Provider,以防止未授权的数据访问。例如,Binder非常适合于复杂的、双向的、实时通讯,而Intents更适合于偶尔的、简单的数据传递。

2024-04-15 08:39:06 551

原创 Android Activity 启动涉及几个进程

Zygote进程在Android系统启动时被初始创建,并且初始化了虚拟机(Dalvik或ART),预加载了Android系统的核心类库。所有的Android应用进程都是通过fork()从Zygote进程派生出来的,这允许应用快速启动,因为它们继承了已加载的系统资源。Launcher,即Android的桌面应用,提供了用户界面来启动应用的Activity。这个进程有它自己的UI,当用户点击某个应用图标时,Launcher将发出一个Intent来请求启动对应的Activity。

2024-04-14 21:06:35 577

原创 Gradle 的子Module中判断宿主APP是否有集成某个AGP插件

在子module的build.gradle.kts 文件中。

2024-04-14 18:40:59 110

原创 概念:线程池

线程池是一种管理和优化多线程执行的技术,主要用于减少创建和销毁线程的开销,提高系统资源的利用率,以及简化线程管理。在很多编程环境和应用程序中,线程池是实现高性能并发编程的关键组件。

2024-04-14 18:35:11 218

Window Plist文件 查看工具

由于plist 文件是MAC 系统定义的, window下不支持此文件类型, 需要下载辅助工具进行查看, 此资源本人也正在使用,直接运行plistset原版.exe 就可以安装

2020-02-14

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

TA关注的人

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