- 博客(89)
- 资源 (3)
- 收藏
- 关注
原创 Android组件化依赖库,Base库、网络、UI、相册、拍照、扫码、JsBridgeWebview等库一键引入
Android组件化依赖库,base库一键引入
2022-06-21 15:43:39 283
原创 git 常用命令
初始化一个Git仓库 git init查看分支:git branch创建分支:git branch 切换分支:git checkout 创建+切换分支:git checkout -b 合并某分支到当前分支:git merge 删除分支:git branch -d 新建一个标签 git tag 指定标签信息 git tag -a -m “blablabla…”用PGP签名标签 g...
2019-07-25 10:33:49 254
原创 鸿蒙系统调用openInputStream(uri)打开Uri文件时卡顿阻塞
鸿蒙系统调用openInputStream(uri)打开Uri文件时卡顿阻塞
2022-11-16 14:24:40 883
原创 GoAdmin各个框架版本
Echo+EleVue前后端分离版 采用Echo、Vue、ElementUI等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Echo_EleVue。Gin+EleVue前后端分离版 采用Gin、Vue、ElementUI等框架研发前后端分离版本 https://gitee.com/easygoadmin/EasyGoAdmin_Gin_EleVue。每个版本都有自己的优势和劣势,可以根据自己的实际业务和需求进行选择;
2022-09-23 11:05:21 609
原创 Mac上配置 Android 环境变量
Android 开发过程中,用到 adb 命令,提示:zsh: command not found: adb,需要在 Mac 上配置 Android 环境变量1、打开 Mac 的 Terminal 终端,输入 cd ~/ 【进入当前用户的home目录】2、输入【如果没有.bash_profile这个文件,则创建一个这个文件】3、输入【打开我们创建的这个文件,此时应该弹出一个文本编辑框,如果是第一次配置环境,那么文本编辑框为空白】
2022-09-20 10:44:05 3300
原创 BroadcastReciver 和LocalBroadcastManager区别
BroadCastRecevier 和 LocalBroadCastRecevier区别
2022-06-23 10:35:02 298
原创 Bitmap加载内存分析
Bitmap加载内存分析一个像素所占的内存,有以下几种像素格式:2.从本地磁盘 、asset、等方式中加载图片当使用第三方库时,则不能用这些公式来计算,因为三方库内部会重新对内存进行优化。eg:fresco:不管图片来源是哪里,即使是 res,图片占用的内存大小仍旧以原图的分辨率计算。Glide:如果有设置图片显示的控件,那么会自动按照控件的大小,降低图片的分辨率加载。图片来源是 res 的分辨率转换规则对它也无效。1、图片分辨率,也就是图片尺寸2.........
2022-06-22 18:26:43 486
原创 Android任务栈ActivityStack、TaskRecord、ActivityRecord关系
ActivityStack、TaskRecord、ActivityRecord关系
2022-06-21 15:10:04 1262 1
原创 ProgressBar.setIndeterminateDrawable不生效或不显示
ProgressBar.setIndeterminateDrawable不生效或不显示如果要修改IndeterminateDrawable时,发现第一次设置能正常显示,再次设置就会不显示,这时需要和setProgressDrawable方法一起调用ProgressBar.setIndeterminateDrawable()ProgressBar.setProgressDrawable()就会生效了。...
2022-02-25 16:48:16 1704 1
原创 水印隐私协议
证件加水印用户隐私政策发布日期:2020年5月20日生效日期:2020年5月20日提示条款:您的信任对我们非常重要,我们深知个人信息对您的重要性,我们将按法律法规要求,采取相应安全保护措施,尽力保护您的个人信息安全可控。鉴于此,证件加水印服务提供者(或简称“我们”)制定本《用户隐私政策》(下称“本政策/本隐私政策”)并提醒您:本政策适用于证件加水印提供的所有产品和服务,包括但不限于适用于电脑、移动智能终端的应用程序、网页、供第三方网站和应用程序使用的软件开发工具包(SDK)和应用程序编程接口(AP
2022-01-17 23:19:36 4014
原创 APP反编译工具JADX
JADX的安装clone源码:git clone https://github.com/skylot/jadx.git接着进入JADX目录并运行构建命令:cd jadx./gradlew dist
2021-11-05 10:00:39 223
原创 Android NDK放置 .so 文件
简介mips / mips64: 极少用于手机可以忽略x86 / x86_64: x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,实现 对 arm .so 的兼容,再考虑 x86 1% 以下的市场占有率,x86 相关的两个 .so 也是可以忽略的armeabi: ARM v5 这是相当老旧的一个版本,缺少对浮点数计算的硬件支持,在需要大量计算时有性能瓶颈armeabi-v7a: ARM v7 目前主流版本arm64-v8a: 64位支持类型armea
2021-08-19 18:29:40 242
原创 避免从桌面启动程序后,会重新实例化入口类的activity
// 避免从桌面启动程序后,会重新实例化入口类的activity if (!this.isTaskRoot()) { // 当前类不是该Task的根部,那么之前启动 Intent intent = getIntent(); if (intent != null) { String action = intent.getAction(); if (intent.hasCategory
2021-08-16 11:00:45 209
原创 kotlin内联函数
今天的主角是 inline ,这不是一个 Kotlin 特有的概念,大多数编程语言都支持内联。 内联函数 的语义很简单:把函数体复制粘贴到函数调用处 。使用起来也毫无困难,用 inline关键字修饰函数即可。 然而问题的关键并不是如何使用 inline ,而是什么时候使用 inline ? 既然 Kotlin 提供了内联,它肯定是为了性能优化而存在的,那么,它又真的是包治百病的性能良药吗? ...
2021-06-23 15:11:14 2170 1
原创 git忽略本地已存在文件的修改
git仓库提交总有一些文件不想提交到远程,而git忽略的文件也有但是不能动 因为.gitignore 文件的东西变得话 会提交到仓库我本地一些config的配置我不想每次提交都把勾去掉 所以git设置 忽略仅仅我本地的一些文件的上传1、将文件修改忽略首先进入到这个文件夹的所在的目录然后再设置忽略文件夹的提交git update-index --assume-unchanged [file-path]2、取消文件忽略git update-index --no-assume-unchanged
2021-06-23 11:28:01 1824
原创 Android混淆配置(含androidx、kotlin)
一、首先认识几个关键字#libraryjars 声明lib jar文件#dontwarn 不提示警告 dontwarn是一个和keep可以说是形影不离,尤其是处理引入的library时.#引入的library可能存在一些无法找到的引用和其他问题,在build时可能会发出警告,#如果我们不进行处理,通常会导致build中止.#因此为了保证build继续,我们需要使用dontwarn处理这些我们无法解决的library的警告.#dontnote:指定不去输出打印该类产生的错误或遗漏#keep 保
2021-06-22 17:20:13 6418 2
原创 Android Apk瘦身攻略
代码保持良好的编程习惯,不要重复或者不用的代码,可以使用Lint等工具查看。谨慎添加libs,移除使用不到的libs。使用proguard混淆代码,它会对不用的代码做优化,并且混淆后也能够减少安装包的大小。native code的部分,大多数情况下只需要支持armabi与x86的架构即可。如果非必须,可以考虑拿掉x86的部分。资源使用Lint工具查找没有使用到的资源。去除不使用的图片,String,XML等等。assets目录下的资源请确保没有用不上的文件。生成APK的时候,aapt工具本身
2021-06-03 19:11:38 80
原创 fatal: unable to access ‘https://github.com/XXX.git/‘: OpenSSL SSL_connect: SSL_ERROR_SYSCALL in con
fatal: unable to access ‘https://github.com/XXX.git/’: OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443解决办法git config --global http.sslVerify false
2021-05-19 22:42:09 1139 2
原创 Dialogfragment嵌套显示闪烁问题
// //dialog中显示dialog 因为dimAmout原因会显示原背景闪一下,这里移除相关flag可以在第二个dialog中设置window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
2021-05-11 14:55:44 1374 1
原创 外观模式、代理模式、装饰模式和中介者模式的区别
外观模式面对复杂的子系统,对外提供统一的接口调用代理模式控制对被代理类的访问。装饰模式装饰器是装饰对象,为装饰的对象增强功能中介者模式封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散。...
2021-04-07 15:24:37 482
原创 Android Studio无法运行Java main方法的解决办法
gradle.xml<?xml version="1.0" encoding="UTF-8"?><project version="4"> <component name="GradleMigrationSettings" migrationVersion="1" /> <component name="GradleSettings"> <option name="linkedExternalProjectsSettings">
2021-03-29 18:53:31 303
原创 Handler消息Message屏障消息
Message分为3中:普通消息(同步消息)、屏障消息(同步屏障)和异步消息。我们通常使用的都是普通消息,而屏障消息就是在消息队列中插入一个屏障,在屏障之后的所有普通消息都会被挡着,不能被处理。不过异步消息却例外,屏障不会挡住异步消息,因此可以这样认为:屏障消息就是为了确保异步消息的优先级,设置了屏障后,只能处理其后的异步消息,同步消息会被挡住,除非撤销屏障。同步屏障是通过MessageQueue的postSyncBarrier方法插入到消息队列的。MessageQueue#postSyncBar
2021-03-22 18:55:27 487
原创 事件合并CountDownLatch、CyclicBarrier与RxJava中的zip和merge、concat
事件合并相关的应用1、CountDownLatchcountDownLatch是一个计数器,线程完成一个记录一个,计数器递减,只能只用一次2、CyclicBarrierCyclicBarrier的计数器更像一个阀门,需要所有线程都到达,然后继续执行,计数器递增,提供reset功能,可以多次使用RxJava 中的合并操作符Observable.just(1,2,3,4,5),Observable.just(“A”,“B”,“C”,“D”)3、concat(按顺序不会交叉)concat:组合多个
2021-03-22 15:10:34 348
原创 2.5代指纹追踪技术—跨浏览器指纹识别
01. 研究背景在如今,做安全防御已经不仅仅是被动的等着攻击者攻击,作为防御方,有越来越多的方法去反击攻击者,甚至给攻击者一些威胁。设备指纹技术是一种长久有效的追踪技术,即使攻击者挂再多 vpn,也能够准确识别攻击者身份。本文借助理海大学发布的 (Cross-)Browser Fingerprinting via OS and Hardware Level Features 文章,写一些个人理解,与原文一并服用,效果更佳。02. 设备指纹技术介绍1. 第一代第一代指纹追踪是 cookie 这类.
2021-03-19 16:59:59 1198
原创 Java堆内存
Java堆内存 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。 新生代:Young Generation,主要用来存放新生的对象。老年代:Old Generation
2021-03-17 10:58:28 719
原创 Java并发编程:线程池的使用
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池,首先我们从最核心的ThreadP.
2021-03-10 14:18:34 119
原创 多个Activity生命周期交叉
多个Activity生命周期说起单个Activitity的生命周期,大家都不陌生,那么多个Activity之间的调用流程你知道吗?demoActivityA、ActivityB。从A 启动跳转到B,再从B结束返回A。流程如下,当B结束时A:onPause ->B:onCreate ->B:onStart ->B:onResume ->A:onStop ->B:onPause -> A:onStart -> A:onResume->B:onStop-&
2021-03-01 16:16:24 327 1
原创 Android输入框对应的软键盘的几种属性
windowSoftInputMode它总共有9种状态,官方给的9种状态的解释大概如下:【1】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置【2】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示【3】stateHidden:用户选择activity时,软键盘总是被隐藏【4】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
2020-11-27 15:10:37 619
原创 Android自动旋转屏幕仿b站客户端视频
自动旋转屏幕如果不想Activity重建 需要配置 android:configChanges="orientation|keyboardHidden|screenSize"然后还要监听手机的旋转角度,这个一般搭配 看手机是否开启 自动旋转功能。因为一般只有开启了 自动旋转才会用到处理自动旋转屏幕这块的逻辑,而且和锁定屏幕方向的处理情况会不太一样。public class ScreenAutoRotationHelper { private OrientationEventListene
2020-11-05 18:14:58 350
原创 引用拷贝、浅拷贝和深拷贝区别
类型拷贝一般分为二大类 引用拷贝 和 对象拷贝,我们通常讲的深拷贝和浅拷贝都属于对象拷贝。引用拷贝顾名思义,即是对引用地址的拷贝,说明引用地址一样,指向堆中的对象是同一个对象。如果对一个对象进行改变,其他对象也会跟着改变。对象拷贝对象拷贝指 对某一对象进行拷贝,是创建了一个全新的对象,也就是内存中存在二个不同地址的对象,这二个对象的基本数据类型变量的内容值都是一样的,但所包含的对象变量的地址可能一样可能不一样,浅拷贝与深拷贝的区别就在这里。1.浅拷贝当前对象里包含有对象变量,如果复制的对象中
2020-09-30 18:48:25 4244 2
原创 Bitmap计算大小方式
首先我们来了解一下四种存储模式public static final Bitmap.Config ALPHA_8public static final Bitmap.Config ARGB_4444public static final Bitmap.Config ARGB_8888public static final Bitmap.Config RGB_565ARGB_8888、ARGB_4444、RGB_565、ALPHA_8四种类型为bitmap在内存中存在的四种色彩的存储模式,他们本质
2020-09-15 10:28:41 3897
原创 let,with,run,apply,also函数区别
let,with,run,apply,also函数区别函数名定义inline的结构函数体内使用的对象返回值是否是扩展函数适用的场景letfun <T, R> T.let(block: (T) -> R): R = block(this)it指代当前对象闭包形式返回是适用于处理不为null的操作场景withfun <T, R> with(receiver: T, block: T.() -> R): R = receiver.b
2020-09-11 15:52:04 387
原创 Android事件分发和传递
传递流程Activity -> PhoneWindow -> DecorView -> ViewGroup -> View三大事件1.dispatchTouchEvent2.onInterceptTouchEventActivity 和View 都没有此方法,因为Activity 而View是因为没有子View不需要拦截3.onTouchEvent所有人都不处理D/Activity: dispatchTouchEvent 0D/MyViewGroup: dis
2020-08-27 16:51:07 232
原创 Android 模块化和组件化等多模块library混淆proguard配置
主模块的配置基本buildTypes { release { minifyEnabled true //是否开启混淆 shrinkResources true //去除无用资源 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' debuggabl
2020-08-27 15:00:11 1004
bcprov-ext-jdk15on-1.54和bcprov-jdk15on-1.54.jar
2023-01-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人