Android进阶之路
从零到一和从一到一百。从代码角度出发,讲述Android学习过程中的思考和总结,一步步走向Android高阶之路。。。
静默加载
优秀的判断力来自于经验,但经验来自于错误的判断。在看着别人走过的路时,思考怎么走自己的路。无私奉献不是天方夜谈,有时候,我们也可以做到。
-
原创 修改AAR和Jar中class文件
前言最近帮助同事解决了一个比较棘手的问题,一路采坑的过程比较有意思。在此记录下来。(PS:主要原因是项目比较大,我们只有整个Android项目部分业务侧代码的开发权限。所以解决问题的一些解决问题的常规手段无法使用。)问题需求:Web页面中H5和native交互,保存base64图片。问题:使用现有的已经封装好的Hybrid协议,在最后集成测试发现部分手机无法保存成功。调试发现H5中使用原有的协议格式调用新协议,无法触发业务侧native注册的新协议的日志和断点。怀疑原有的协议格式问题,当.2021-01-26 19:28:1132
0
-
原创 Android8.0隐式广播和自定义签名权限
前言记录一下今天同事给我分享的比较有意思的Bug,在已有的已经在AndroidManifest.xml中注册的广播在部分手机上无法通过Action隐式启动。上网搜搜资料自己写了个Demo,Mark一下!!Android官网:Oreo后台执行限制我们这里主要看对于广播的影响,摘抄一段官网上的介绍:广播限制如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播,则会引发问题:触发广播的系统事件会导致所有应用快速地连续消耗资源,从而降低用户体验.2021-01-26 09:30:1955
0
-
原创 Android中R文件ID值
Android中R文件ID值文章目录Android中R文件ID值前言知识回顾在代码中访问资源语法R文件Lib库的R文件AAR中的R文件依赖库R文件的生成R文件的数量后续疑问官网参考资料前言前端时间在学习 Qigsaw 相关的源码,思考到一个问题。动态加载的feature 包里的 资源id 是否会与主包中的 资源id 冲突。因为主包的 apk 文件不一定是和加载的feature 包是一起打包生成的,feature 包是可以进行升级的。查看 Qigsaw编译脚本对 old.apk 进行增量编译 feat2021-01-11 17:21:3592
0
-
原创 DiffUtil和它的差量算法
DiffUtil和它的差量算法前言学习Myers'Diff 算法是从 DiffUtils 源代码开始的,但DiffUtil和它的差量算法这篇却是文章是在写完 Myers‘Diff之贪婪算法 和 Myers‘Diff之线性空间细化 这两篇算法文章之后着手的。比较先需要学会算法才能理解代码实现并更好的进行使用。文章目录DiffUtil和它的差量算法前言DiffUtil介绍DiffUtil.DiffResultDiffUtil.DiffResultDiffUtil使用DiffUtil中Myers算法代码2020-10-16 20:08:49204
0
-
原创 App Startup 源码分析
文章目录集成接入实现初始化组件设置AndroidManifest条目手动初始化组件禁用单个组件的自动初始化禁用所有组件的自动初始化手动调用组件初始化程序运行Lint检查源码分析lint.jarAndroidmanifest.xmlInitializationProviderAppInitializerApp Startup总结上篇文章 非侵入试获取Context进行SDK初始化 讲述了通过ContentProvider 进行 SDK 的初始化,文章末尾引出了 App Startup 。如果一个 app .2020-07-07 19:52:10246
0
-
原创 非侵入式获取Context进行SDK初始化
文章目录非侵入试获取Context进行SDK初始化picasso 初始化InstantRunLeakcanaryApp Startup非侵入试获取Context进行SDK初始化当我们在使用第三方SDK,或者自己进行SDK封装时,如果需要需要用到 Context 进行初始化时,一般做法就是将初始化方法暴露给调用方,让调用方在初始化SDK时,传入上下文环境。publi class App extends Application { @Override public void onCrea.2020-07-07 19:42:19218
0
-
原创 Android内存泄漏检测工具使用手册
性能优化除过我们平时自己设计和开发之外就得考虑使用工具进行检测。Android关于能够定位和剖析问题的内存工具有很多,但不是每个工具所有场景都能覆盖到。这篇文章主要介绍LeaKCanary、shark、Android Profile、MAT、Jhat、dumpsys meminfo、GC Log等。2020-06-05 20:01:50709
0
-
原创 【总结】Android的16ms和垂直同步以及三重缓存
个人博客地址 http://dandanlove.com/前言手机屏幕是由许多的像素点组成的,每个像素点通过显示不同的颜色最终屏幕呈现各种各样的图像。手机系统的类型和手机硬件的不同导致UI的流畅性体验个不一致。屏幕展示的颜色数据 在GPU中有一块缓冲区叫做 Frame Buffer ,这个帧缓冲区可以认为是存储像素值的二位数组。 数组中的每一个值就对应了手机屏幕的...2018-04-26 19:55:303003
3
-
原创 Bitmap图片压缩,大图加载防止OOM
文章目录前言RGB介绍图片占用内存的计算读取位图尺寸和类型内存中如果加载一张 `500*500` 的 `png` 高清图片.应该是占用多少的内存?如果这个图片为本地资源图片,是否还是0.95MB呢?Bitmap压缩压缩原理压缩Bitmap磁盘占用空间的大小压缩Bitmap占用内存的大小使用inSampleSize进行压缩使用createScaledBitmap或MatrixBitmapFacto...2020-04-22 15:08:58497
0
-
原创 Android中的数据库连接池
最近在看数据库相关的三方库的时候,我发现在Android应用开发的时候是可以并行操作数据库的读写,但Android默认的数据连接池中只有一个数据库链接。一个数据库连接能实现并发么?要是一个数据库链接可以实现并发,那么为什么需要数据库连接池?数据库连接池介绍每次提到连接池我们很快能想到线程池。线程池的创建可以减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。数据库连接...2019-11-02 20:20:311369
2
-
原创 View的postDelayed方法深度思考
前言突然某天好友老瑞问我 “View的postdelayed方法,延迟时间如果设置10分钟或者更长的时间有什么问题吗?“ 。当时听到这个问题时候我只能联想到 Handle.postDelay ,与此同时让我回想起了之前的一些疑问?View的postDelayed方法,延迟时间如果设置10分钟或者更长的时间有什么问题吗?View的postDelayed方法,延迟时间如果设置为负数有没有...2019-10-25 16:26:29474
0
-
原创 Android动画绘制原理(源码解析)
Android 平台提供了三类动画,一类是 Tween 动画-Animation,即通过对场景里的对象不断做图像变换 ( 平移、缩放、旋转 ) 产生动画效果;第二类是 Frame 动画,即顺序播放事先做好的图像,跟电影类似。最后一种就是3.0之后才出现的属性动画PropertyAnimator。想知道动画与界面渲染与屏幕刷新有着什么样的关系?想知道属性动画为什么会发生内存泄露么?2018-05-01 00:02:16623
0
-
原创 Android系统的编舞者Choreographer
个人博客地址 http://dandanlove.com/前言上一篇文章 Android的16ms和垂直同步以及三重缓存 解释了手机流畅性的问题,并在文章中提到了在Android4.1中添加的Vsync。Choreographer机制,用于同Vsync机制配合,实现统一调度界面绘图。Choreographer的构造Choreographer是线程级别的单例,并且具有处理当前线程...2018-04-26 19:59:203984
0
-
原创 从JVM到Dalivk再到ART(class,dex,odex,vdex,ELF)
个人博客地址 http://dandanlove.com/现在市面上的Android手机大部分都是运行的是ART虚拟机了。还记得自己一部Android手机(HUWEIg520),Android4.1系统。那时候还是没有ART虚拟机的。作为Android开发者,我们应该对Android的发展历史有些了解为什么Android会经历这么多的变化。Android是先有JVM然后是Dalvik,接着是现在...2019-10-18 10:34:13390
2
-
原创 深入解析AIDL的实现:Messenger
Messenger可以翻译为信使,顾名思义,通过它可以在不同进程中传递Message对象,在Message中放入我们需要传递的数据,就可以轻松地实现数据的进程间传递了。Messenger是一种轻量级的IPC方案,它是AIDL在Android中的一种经典实践。文章主要讲述Messenger利用AIDL进行进程间通信,其中不免会涉及到AIDL的知识点。2017-07-10 14:38:33846
0
-
原创 Android类加载之PathClassLoader和DexClassLoader
Dalvik虚拟机加载的dex文件。dex文件是Android对与Class文件做的优化,以便于提高手机的性能。可以想象dex为class文件的一个压缩文件。dex在Android中的加载和class在jvm中的相同都是基于双亲委派模型,都是调用ClassLoader的loadClass方法加载类。2017-02-23 16:31:472528
2
-
原创 Android之NDK开发初体验
作为Android开发人员,没有接触过NDK开发也接触过so文件吧。其实NDK编程也没有看来的那么隐秘,今天我们来看看咱们利用NDK来写出自己的so文件2017-03-25 00:50:073082
0
-
原创 又一年对Android消息机制(Handler&Looper)的思考
前言Android消息机制对于每一个Android开发者来说都不陌生,在日常的开发中我们不可避免的要经常涉及这部分的内容。从开发角度来说,Handler是Android消息机制的上层接口,这使得在开发过程中只需要和Handler交互即可。Handler的使用过程很简单,通过它可以轻松的将一个任务切换Handler所在的线程中去执行。很多人认为Handler的作用是更新UI,这的确没错,但……2017-06-25 22:37:431051
1
-
原创 Activity中的Window的setContentView
这篇文章距离现在已经两年的时间了。当初自己刚毕业工作不久,才开始接触Android,有一天中午和同事一起吃饭的时候,一个大牛问我你思考过Activity的setContentView是怎么执行的么。当初就因为这个问题我接入到了Android源码。两年时间过去了现在回过头来看,感觉自己写得有很多的不足,本次再补充一下。前言这几天正在进行初级自定义组件的学习,一不小心想到了view到底是怎...2015-10-13 11:00:371535
0
-
原创 Android创建.aidl文件
今天自己学习关于夸2014-08-06 10:10:251160
0
-
原创 Android里的onTouch事件的分发与消费
简单讲述:Android里的onTouch事件的分发与消费初学Android将近一年的时间了,由于一开始就是工作性学习(没有系统的学习)。所以一般接触最多的就是组件的使用,而自己在接触比复杂的组件或者Android其他相关知识的时候总是感觉比较吃力,嗯,就是比较吃力,想要研究研究却不知道从哪里下手,现在想写一些基础的东西来系统的了解一下Android。在看到Android的窗口管理机制当中的一些知识2015-10-26 17:06:091017
0
-
原创 Android关于VideoView的一些思考和总结
最近在做一期有关于视频的项目开发。因为项目周期比较紧,而且自己以前也没有对于视频相关的经验积累。所以在开发的时候遇到了问题,自己尝试解决并记录下来。(PS:视频都是下载完再进行播放类似于微信朋友圈的视频功能,播放组件用的是分装的原生的VideoView)2016-05-31 10:05:397491
1
-
原创 Android网络之HttpUrlConnection和Socket关系图解
前几天阅读完Retrofit2.0源码写了一篇Retrofit2.0使用和解析 的文章,因为Retrofit2.0现在只支持OkHttp,OkHttp网络框架也在Android高版本的SDK中使用,自己为了能更好的优化Android中关于网络这个模块,然后又阅读了OkHttp3.0的源代码。OkHttp3.0的源码中的设计模式和网络有关的东西很多,自己看的很懵逼,所以想先看看HttpUrlConnection的实现。2016-07-14 22:57:092580
0
-
原创 Android网络之HttpUrlConnection和Socket关系解析
多年以前Android的网络请求只有Apache开源的HttpClient和JDK的HttpUrlConnection,近几年随着OkHttp的流行Android在高版本的SDK中加入了OkHttp。但在Android官方文档中推荐使用HttpUrlConnection并且其会一直被维护,所以在学习Android网络相关的知识时我们队HttpUrlConnection要有足够的了解。。。。2016-07-18 00:39:156400
1
-
原创 Retrofit2.0中注解使用套路
之前有讲过Retrofit2.0的简单使用和解析。最近在做Retrofit替换之前使用的AsyncHttpClient,在替换的过程中遇到一些之前忽视的小细节。自己感觉知道这几点在开发中灵活使用Retrofit非常有好处。说说Retrofit中的注解 @Query,@QueryMap,@Field,@FieldMap,@FormUrlEncoded,@Path,@Url 这七种注解。2016-08-30 19:14:5220411
5
-
原创 Retrofit2.0+Okhttp不依赖服务端的数据缓存
随着Retrofit在项目中的使用,替换的以前使用的网络框架,相关的缓存机制也要进行替换,网络上大部分的Retrofit+okhttp缓存资料都是进行针对所有url的而且需要服务端的配合。有些时候是先有服务然后app去调用这些服务,所以这个时候没有服务端的配合我们在前端实现缓存比较空难但并不是很可以。2016-09-18 19:45:232235
0
-
原创 Serializable和Parcelable的再次回忆
序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计里面更为显著。恰当的序列化协议不仅可以提高系统的通用性、强健性、安全性、优化系统性能,而且会让系统更加易于调试、便于扩展。总而言之搞2016-10-18 10:55:023666
3
-
原创 Android:IPC之AIDL的学习和总结
为了使得一个程序能够在同一时间里处理许多用户的要求。即使用户可能发出一个要求,也肯能导致一个操作系统中多个进程的运行(PS:听音乐,看地图)。而且多个进程间需要相互交换、传递信息,IPC方法提供了这种可能。IPC方法包括管道(PIPE)、消息排队、旗语、共用内存以及套接字(Socket)。2016-10-27 17:33:342833
2
-
原创 AIDL源码解析in、out和inout
为什么会想写这篇文章,只因为一个error idl.exe E 4928 5836 type_namespace.cpp:130] 'Book' can be an out type, so you must declare it as in, out or inout. 看过上一篇文档的同学都知道这是因为在AIDL文件中使用非常规类型作为参数传递的时候没有标记指向tag。2016-10-27 17:35:592790
0
-
原创 linkToDeath机制了解和使用
往往是由于服务端进程意外停止了,这时我们需要重新连接服务。那么我们可以使用linkToDeath机制,如果使用bindService那么还可以通过ServiceConnection.onServiceDisconnected方法进行重连。2016-12-21 14:14:517634
0
-
原创 Service之onStartCommand剖析笔记
Service是我们学习Android的基石之一,它在移动应用程序中使用非常广泛。比如应用定位,push消息,内存流量监听等等。 记得大四那年在公司实习的时候,我做的第一个调研就是怎么让接受服务器push的Service不被kill掉(或kill后实现重新启动)。在调研的过程中就了解到如果Service的onStartCommand方法返回值为START_STICKY时。。。。2016-12-28 20:47:51510
0
-
原创 Android之Service学习笔记
前言本来想学习学习Binder通信机制,在学习的过程中又接触AIDL并开始学习,在AIDL学习过程中看到bindService,接着就想回顾一下Service的一些知识。希望温故可以知新,也算是年末最后一篇笔记,给自己明年有一个好的开头~!~!2016-12-28 20:50:01869
0