Android性能优化-LeakCanary LeakCanary主要用来进行内存泄漏检测,并且可以直观的展示泄漏的路径 如何使用1234dependencies { // debugImplementation because LeakCanary should only run in debug builds. debugImplementation 'com.squareup.leakcanary:leakc 2020-10-14 #Android
Android音频技术攻略-AudioTrack相关 导读 本文按“定位与参数 -> 生命周期 -> 写入机制 -> API 观测 -> 故障恢复”组织,适合作为 AudioTrack 实战手册。 如果只看落地,建议优先阅读 1.2、2.3、3.3、5.1~5.4。 一、AudioTrack 定位与创建参数1.1 AudioTrack 是什么(定位)1.1.1 基础定义 AudioTrack 是 Android 侧 PCM 2026-02-16 #音视频
Gradle学习笔记-基础 Gradle是一种自动化构建语言,是一种DSL(Domain Specific Language 特点领域语言),目前是Android的默认构件构建工具,是一个编程框架。 作用 将Java/Kotlin(逻辑代码)、XML(界面代码)、NDK C/C++(JNI)、资源文件,*RenderScript(并行运算)*这些文件通过编译过程打包成一个Apk。 解决自己的问题 帮助其他人优化开发流 2019-04-22 #Gradle
JNI基础知识 JNI基础概念JNI本意为Java Native Interface,为了方便Java调用C、C++等本地代码所封装的一层接口。当出现一些无法用Java处理的任务时,就可以借用JNI技术去完成。一般来说有以下几种情况需要用到JNI技术: 需要调用Java语言不支持的依赖于操作系统平台特性的一些功能。例如:调用当前Android系统的底层功能,而Java无法实现,就需要用到JNI 为了提升应用 2019-03-02 #Android
Flutter-Dart语言简介 Dart语言设计借鉴了Java和JavaScript,同时存在了两者的特性。 Dart变量声明1var name = 'wxy'; 表示名字是name的变量包含一个指向值为 bob 的字符串对象引用。 当前name的类型被推断为String,当然也可以通过直接指定变量类型,例如String name ='wxy'; 内置类型 主要支持数字、字符串、布尔、数 2021-02-10 #Flutter
Gradle操作小记 显示所有依赖关系解析树 1./gradlew app:dependencies 生成项目 1./gradlew clean assembleEnvTestReleaseChannels -PchannelList=default 清理项目 1./gradlew clean api与implementation的区别api:完全等同于原先的compile指令,使用了该命令编译的依赖 2018-04-03 #Gradle
Hook技术简析 说到Hook技术需要先提到逆向工程,主要目的是在不能轻易获得必要生产信息的情况下,直接从成品分析,推导出产品的设计原理。 逆向分析又分为 静态分析:不执行程序的情况下对程序行为进行分析的技术 动态分析:在程序运行时对程序进行调试的技术。Hook属于动态分析。 代理模式设计模式--静态代理模式和动态代理模式原理及实现 Hook技术概述 对象A直接调用B,对象B结果直接回调给A。 Hook 2019-02-06 #Java
Gradle学习笔记-Groovy基础 Groovy是基于JVM的一种动态语言,语法与Java相近,上手较快。**Groovy完全兼容Java。**又增加了很多动态类型和灵活的特性,是一门比较灵活的动态脚本语言。 变量Groovy中通过def定义变量,无需指定变量类型,自动判断。 数据类型1234567891011121314151617task printDef << {//字符串def str1 = &qu 2019-04-23 #Gradle
HTTP的原理和工作机制 HTTP的原理和工作机制 什么是HTTP? HyperText(可以指向其他文本的链接文本) Transfer Protocol——超文本传输协议。位于TCP/IP协议的最顶层——应用层。 从日常角度来说,在App中调用网络请求,直接就会使用到HTTP。发送数据(Request)到服务端,等待服务端数据处理完毕再返回(Response)到App,App在进行后续处理,例如页面展示等。 HTTP工 2020-03-29 #HTTP
Handler机制源码解析(二) 主要包括Handler其他使用知识点 1. 子线程创建Handler对象 不可以直接在子线程创建Handler对象,因为Handler对象必须要绑定一个Looper,才可以使用。 若在子线程需要使用Handler,则需要先创建一个Looper对象即执行Looper.prepare()然后再创建Handler对象时调用Looper.myLooper()获取Looper对象传入方法,最后调用Loop 2018-10-07 #源码解析