Android
漠缠
但行前路,无问西东
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Android架构师技能体系知识指南
例如:扩展函数的实现原理、协程的挂起与恢复机制(状态机)、launch与async的区别、密封类与代数数据类型、内联类与@JvmInline注解的意义。💻 核心技术深度 Java/Kotlin、内存管理、多线程、Framework底层机制(Binder/Handler)、组件生命周期 对原理的理解深度、性能优化实战经验、解决复杂技术问题的能力。模块间没有直接依赖,便于独立开发、测试和复用。目标:将App拆分成独立的模块(如“用户中心”、“商品模块”、“购物车”),像城市的各个功能区,可以独立开发和测试。原创 2025-10-15 21:36:50 · 960 阅读 · 0 评论 -
BuildConfig is defined multiple times 问题解决
1、到build.gradle文件中,将包名称一致的修改掉。1、module包名与app包名写的一致。2、某两个module的包名称定义一致。Android编译时候遇到。2、clean,重新编译。原创 2023-03-03 15:38:02 · 10007 阅读 · 0 评论 -
ASM实践
1原创 2022-11-21 19:46:19 · 415 阅读 · 0 评论 -
Android 编译加速实用技巧
android编译加速技巧转载 2022-11-15 15:46:02 · 371 阅读 · 0 评论 -
Android 组件化 组件上下依赖关系实现
1、创建plugin工程2、自定义plugin实现Plugin接口3、在apply(Project)主入口方法内,完成插件的加载1、定义层级关系,从上往下依次为app/component/library/base,2、定位单个组件的类型定义等级,通过等级来控制是否可用做依赖例:将工程区分为api和impl模块,组件之间通信,只能依赖api模块3、自定义插件,如上4、主工程壳里面,实现组件的加载,具体实现代码分为:1、统一配置config.gradle插件部分:1、自定义plugin2、逻辑原创 2022-11-14 09:26:24 · 1115 阅读 · 0 评论 -
Android gradle编译常见的使用方式
ext {当自定义文件位于工程根目录时,使用方式:1、文件引入apply from: “${rootProject.projectDir}/config.gradle”2、变量引用rootProject.projectDir.ext.test当自定义文件位于当前module目录时,使用方式:2、变量引用使用方式project.ext.test上面第一种local.property,将test变为代码内部变量的方式上面第二种config.gradle的配置变为代码内部变量的方式。原创 2022-11-03 12:03:18 · 963 阅读 · 0 评论 -
Android内存略知一二
当一个对象被另外一个对象持有,而这两个对象的生命周期不一样;当被持有对象的生命周期走完时,持有的对象生命周期还没有走完,这时候就会出现引用链不为空;3、非静态内部类持有外部类的引用,非静态内部类对象的生命周期比外部类对象生命周期长时;1、单例对象持有activity,activity生命周期走完还处于被引用的状态,此时无法回收,造成内存泄漏。也就是GERoots会持有一个对象的引用链,当引用链不为空时,代表当前对象不能被回收;此时又出现一个问题,这个没有被回收的对象,就会造成内存泄漏。原创 2022-11-03 10:47:46 · 900 阅读 · 0 评论 -
应用启动流程分析
主要原因是SystemServer进程由zygote进程孵化,存在一个先后顺序,无法使用binder通信;其次socket为单线程,binder为多线程,并且binder线程池占满会出现异常;fork进程操作本身是单线程的;5、随后执行new Activity,进而执行activity.oncreate()->onstart->onresume完成应用启动。2、AMS向zygote进程请求fork新的进程。4、再通过AMS绑定进程Appcalition。3、此时App进程启动起来。原创 2022-11-01 22:09:59 · 374 阅读 · 0 评论 -
okHttp 责任链模式调用地方
RealInterceptorChain.java 142-153// Call the next interceptor in the chain. RealInterceptorChain next = new RealInterceptorChain(interceptors, streamAllocation, httpCodec, connection, index + 1, request, call, eventListener, connectTimeout,.原创 2021-03-02 10:29:41 · 317 阅读 · 0 评论 -
Java GC(Garbage Collection,垃圾回收)
GC(Garbage Collection,垃圾回收)如何识别“垃圾”对象,回收“垃圾”对象,有必要介绍一下:1、通过一系列名为“GC Roots”的对象作为起始点,从这些根节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain);2、当一个对象到 GC Roots 没有任何引用链相连时,该对象视之为可回收的“垃圾“对象。3、当然,右侧的G和H,单独的F对象,他们没有引用链,所以妥妥的是可回收的“垃圾”对象;而ABCDE对象,都是不可回收的。至于那些对象可做G.原创 2020-11-17 21:52:20 · 689 阅读 · 2 评论 -
Android R 、Android 11 API 30差异报告解读
本文基于Android开发者网站的API参考和差异报告部分进行应用开发中常用的重点API变化进行解读分析,目的在于了解Android11的API差异,了解Android11新增接口能力的同时适配目前正在使用的接口的变化。2、重点API差异解读 需要重点关注的API差异汇总如下:Manifest.permission中新增三个权限:LOADER_USAGE_STATS、MANAGE_EXTERNAL_STORAGE、QUERY_ALL_PACKAGES Intent内新增一个创建...原创 2020-11-11 16:33:28 · 3625 阅读 · 0 评论 -
Kotlin入门介绍
首先,参考官方开发文档:官方文档目录一、Kotlin介绍二、Kotlin最基础语法三、Kotlin与Java完全兼容吗?四、新手使用Kotlin常遇到的问题五、Kotlin高阶函数六、其他本文需要掌握的内容1、Kotlin开发环境搭建2、Kotlin与Java的相互调用3、学会如何把Java代码转成Kotlin,并能正常运行4、了解Kotlin最基本的3个不同于java的特点5、了解什么是高阶函数,常用的Kotlin高阶函数一、Kotlin介绍Ko原创 2020-09-27 13:42:14 · 1068 阅读 · 0 评论 -
java.util.ServiceConfigurationError:终极解决办法、AutoService问题
java.util.ServiceConfigurationError:05-23 15:07:55.597 5382 5453 E AndroidRuntime: at java.util.ServiceLoader.fail(ServiceLoader.java:233)05-23 15:07:55.597 5382 5453 E AndroidRuntime: at java.util.ServiceLoader.access$100(ServiceLoad...原创 2020-05-23 15:15:24 · 8763 阅读 · 0 评论 -
Android native crash 信号量signal对应的含义
与 Java 平台不同,C/C++ 没有一个通用的异常处理接口,在 C 层,CPU 通过异常中断的方式,触发异常处理流程。不同的处理器,有不同的异常中断类型和中断处理方式,linux 把这些中断处理,统一为信号量,每一种异常都有一个对应的信号,可以注册回调函数进行处理需要关注的信号量。所有的信号量都定义在<signal.h>文件中,这里我将几乎全部的信号量以及所代表的含义都标注...原创 2020-04-17 10:30:27 · 2674 阅读 · 1 评论 -
java.lang.NoSuchMethodError: No static method encodeHexString([B解决
01-08 18:29:25.534 20184 20184 E AndroidRuntime: java.lang.NoSuchMethodError: No static method encodeHexString([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Hex; or its super classes...原创 2020-01-08 19:03:03 · 2756 阅读 · 0 评论 -
Android bitmap 转RGB数组(三通道)、RGB数组(单、三通道)转回Bitmap、bitmap Resize 512
直接上工具类,简单易懂import android.graphics.Bitmap;import android.graphics.Matrix;/** * bitmap and rgb bytes dual transfer * * @author guochao * @version 1.0 * @since 2019/12/12 */public class ...原创 2020-01-07 11:11:46 · 5546 阅读 · 1 评论 -
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. > com.a
Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.> com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex相信大家在Android studio开发中,都遇到过...原创 2018-08-06 10:22:47 · 869 阅读 · 0 评论 -
Android App A/B测试总结
关于A/B测试,我想大多数人都听说过。但具体是什么东西呢,可能也只是概念上的一些理解。这里我结合自己的一些看法和应用场景,对A/B测试,进行一个总结,看法浅薄,有错误的地方还请各路同道中人指正。首先,从概念上来说:A/B测试,就是在同一个时间维度,上线两款或多款APP版本,APP不同版本的差异呢:就是UI界面不同,一些具体的操作逻辑不同;让这不同的版本,经过分组的同源访客群,随机的访问,进...原创 2019-04-01 16:05:51 · 1386 阅读 · 0 评论 -
Android app 应用内更新弹出文件管理器,以及android7.0与8.0应用内更新差距所在
应用内更新这个需求,可能大家都做过,也遇到过不少坑,比如我遇到的一个坑:弹出文件管理器选择框对于这种情况,虽然文件的类型已经设置为apk,"application/vnd.android.package-archive"但是,为什么会弹出文件管理器选择框呢,有点莫名其妙,后来我在Intent意图中加了一个Action,就不再提示文件管理器了 intent.setAction(I...原创 2019-04-03 09:28:28 · 903 阅读 · 0 评论 -
Android dalvik虚拟机内部机制详解(1)____类加载机制
定义:在模拟真实机器执行程序之前,将程序的指令和数据装载进入虚拟机内部的运行时环境,使虚拟机中的执行模块可以根据程序执行的需要随时取得目标指令和相关数据,以完成程序的执行任务。作用:将应用程序中Dalvik操作码以及程序数据提取并加载到虚拟机内部,以保证程序的正常运行。首先来一个图,看看类加载机制位于Dalvik虚拟机的什么位置 ...原创 2019-04-09 14:32:41 · 754 阅读 · 0 评论 -
Android架构师——思维导图
参考:https://blog.youkuaiyun.com/csdn_aiyang/article/details/77933165原创 2019-04-26 14:37:58 · 1017 阅读 · 0 评论 -
记Android Framework开发之前
今天是4月的最后一天,金三银四已经正式结束了。我也在这个节点,成功的从Android 纯应用开发,转为了Android FrameWork开发,节后就直接入职,具体公司不方便透露了。先总结下面试,然后是面试过程,和我入职的准备过程。面试第一轮,技术面试面试采用电话面试的形式,根据我的判断,对面是一个做Android Framework开发的leader或者是经验丰富一点的同事,自我介绍...原创 2019-04-30 12:15:23 · 3684 阅读 · 2 评论 -
AMS源码详解第一篇------构造函数详解
//构造函数 // Note: This method is invoked on the main thread but may need to attach various // handlers to other threads. So take care to be explicit about the looper. //注意:此方法在主线程上调用,但可能...原创 2019-05-07 18:57:29 · 1154 阅读 · 0 评论 -
Android 获取当前系统支持的所有语言以及当前系统的语言
/** * 获取当前系统支持的语言集 * @return */ private List<String> getLanguages(){ List<String> list=new ArrayList<>(); Locale[] lg = Locale.getAvailableLocales...原创 2019-05-20 17:32:26 · 4010 阅读 · 0 评论 -
Android 面试系列(二)Android 组件相关
一提到Android 组件,相信大家都不陌生,但面试的时候,有些问题答不出来,就是因为大家只侧重于用,而没有进行源码解读,导致一些问题,深入后就完全不知道了。比如我前两天面试的时候,来面试的是一个3年开发经验的同学,我问他Activity在哪实例化的,他回答在Manifest.xml注册的,然后我说你再想想,他回答我代码里面可以new一个。。。下面贴一些关于Android组件的基础和深入一...原创 2019-05-20 17:52:53 · 378 阅读 · 0 评论 -
Android Media Player 支持的所有多媒体格式(多媒体CTS规范)
本文档描述了Android平台提供的媒体编解码器、容器和网络协议支持。 作为应用程序开发人员,您可以使用任何Android设备上可用的任何媒体编解码器,包括由Android平台提供的媒体编解码器和特定于设备的媒体编解码器。但是,最好使用与设备无关的媒体编码配置文件。下表描述了安卓平台内置的媒体格式支持。 不能保证在所有Android平台版本上都可用的编解码器在括号中注明,例如:...原创 2019-05-21 15:17:52 · 6239 阅读 · 0 评论 -
scanning files to index / Android Studio导入源码不停的scanning files
刚开始接触编译Android 源码,Android studio导入源码后,不停的scanning files to index在网上找了两个方案:1.File>InvalidateCaches/Restart 未生效(不知道我这边为什么没有生效,根据我后续的解决方案,我觉得有可能是因为我下面的配置信息填写不对。)2.File > Project Structure ...原创 2019-05-22 09:45:59 · 2078 阅读 · 0 评论 -
Android dalvik虚拟机内部机制详解(2)____内存管理原理
为了保证Android系统的正常运行和应用程序的稳定性,Dalvik虚拟机的内存管理机制在整个虚拟机系统中占用非常重要的位置。此文章会解决以下五个问题:1.内存管理机制中涉及的关键数据结构2.内存管理机制中涉及到的关键函数3.内存分配的算法和流程4.当前主要的垃圾回收算法5.垃圾回收的流程首先来看一下,内存管理机制在dalvik虚拟机中,与其他模块的协助关系,如下图:...原创 2019-06-18 16:16:46 · 1314 阅读 · 0 评论 -
Android 8.0 悬浮框覆盖状态栏
设置Parms参数params.flags=WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN属性,即可覆盖状态栏原创 2019-07-31 15:55:51 · 2609 阅读 · 1 评论 -
AccessibilityAction.ACTION_SCROLL_DOWN实现滑动
相信大家在使用辅助服务的时候,肯定有过使用AccessibilityAction来实现滑动的时候这里介绍两个API ACTION_SCROLL_DOWN 、ACTION_SCROLL_TO_POSITION两个用法如下,Google官方传送门Bundle argument=new Bundle();node.performAction(AccessibilityNodeInfo...原创 2019-08-29 16:32:30 · 3418 阅读 · 0 评论 -
Android App架构设计理解和扩展
本文主要是针对于个人的一些理解,和平时真正能用上的。如果有不妥之处,说明还是我个人技术不过关,希望大家多多指正。首先来说,一切得看需求、周期、环境。这三个方面啥意思呢1.需求,就是具体的需求文档,设计文档,和应用所需要达到的高度和深度(具体点可以指日活、平均使用时长、累计用户等)2.周期就是应用开发的周期时间,测试时间(是否有A/B测试),后期维护时间,整个生命周期3.环境,就...原创 2019-04-10 13:14:21 · 1026 阅读 · 0 评论 -
Android 事件分发机制源码解析及总结
对于Android 事件分发机制呢,其实就是一句话,将点击事件(MotionEvent)分发到具体的View上。MotionEvent的类型呢,就三种,ACTION_DOWN:手指刚接触屏幕 ACTION_MOVE:手指在屏幕上滑动 ACTION_UP:手指从屏幕上松开的一瞬间三个核心的方法:dispatchTouchEvent() 用于事件的分发 onInterceptTou...原创 2019-04-04 15:02:16 · 413 阅读 · 0 评论 -
Listview item点击一个,多个响应的问题
描述一下,就是我的listview里面有checkbox,我需要在选中item的时候,选中对应的checkbox,这个需求是OK了。但是发现一个问题,就是我选中第一个,那么第5个,或者第6个(这个取决于每页显示的个数)也会响应,纠结了很久,问题还是没有得到解决,我贴出来让大家看看public class PullDownAdapter extends BaseAdapter {...原创 2018-08-31 12:04:06 · 829 阅读 · 0 评论 -
no target device found 问题解决
我们在用Android studio开发APP的过程中,这个问题相信大家都遇到过,但是我看了网上的一些解答,并没有解决问题,所以我自己又看了一下,猫腻出现在这里,首先在Android Studio顶部导航栏中选择Run,如图然后打开Edit Configurations...,出现以下选项,如图此处选择第一个然后此时,运行APP,点击run,会出现下面这个,如图恭喜你,现在...原创 2018-08-28 13:44:10 · 69005 阅读 · 14 评论 -
com.android.volley.ServerError异常解决
今天开发中遇到这样一个问题,Volley框架请求后台的时候,后台还未接到请求,就报错com.android.volley.ServerError出现问题的原因:1.查看了一下请求的URL,发现是传入的参数有问题,Volley框架支持请求参数String、int、float等基本类型,但是不支持直接将HashMap直接转化为字符串例如:hashmap.toString();这个就不能...原创 2018-08-22 13:50:46 · 5832 阅读 · 0 评论 -
Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error:
网上的方法都试完了,依然不好使问题是出在,将eclipse项目转为android stuido项目,把res/app/manifest.xml/libs拷贝过来之后,出现的。在解决问题的途中,还出现了一个幺蛾子,就是关于账户用户名的问题,有个博主说是电脑账户用户名带了中文,这个根本就是在扯犊子!!!本人实验了一下,电脑差点没挂,还好把注册表配置改回来就好了,大家注意一下! ...原创 2018-08-02 16:56:58 · 300 阅读 · 0 评论 -
Error:Execution failed for task ':app:preDebugAndroidTestBuild'.异常解决Resolved versions for app (26.1.
1.在build.gradle(app)文件里的,dependences下面添加如下代码 androidTestCompile('com.android.support:support-annotations:26.1.0') { force = true }2.我们来分析一下这个异常的原因,是因为AS3.0之后,这个test模块,基于27的sdk版本,那么...原创 2018-08-02 16:53:44 · 343 阅读 · 0 评论 -
Android新特性介绍,ConstraintLayout完全解析
本文转自郭霖博客:点击此处跳转看完guolin的这个博客,觉得很有帮助,把ConstrainLayout用法介绍得很详细,很有用。本篇文章的主题是ConstraintLayout。其实ConstraintLayout是Android Studio 2.2中主要的新增功能之一,也是Google在去年的I/O大会上重点宣传的一个功能。我们都知道,在传统的Android开发当中,界面基本都是靠编...转载 2018-08-07 10:26:24 · 348 阅读 · 0 评论 -
draw9patch、用法
注意要点,经过draw9patch处理过的图片不能放在mipmap文件夹下面,只能放到drawable文件夹目录下。1.首先找到SDK文件夹,查找方法如下(仅供参考,不是新手直接略过): ①.如果你用eclipse开发工具,点击window 选择 preferences 。点击左边的Android,点击左边的Android,在右边的SDK Location中查看SDK路径即可h...原创 2018-08-06 17:11:44 · 1601 阅读 · 0 评论 -
Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]、应用未安装问题解决
用adb 命名安装过应用的人都知道,应用安装是会有很多坑的首先Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]这个问题的解决一般有四个方案:1.manifest.xml中加入了android:testOnly="true"属性,那么请改为false2.在gradle.properties(项目根目录或者gradle全局配置目录 ~...原创 2018-07-26 11:58:52 · 18357 阅读 · 1 评论
分享