Android进阶之路
文章平均质量分 93
从零到一和从一到一百。从代码角度出发,讲述Android学习过程中的思考和总结,一步步走向Android高阶之路。。。
静默加载
优秀的判断力来自于经验,但经验来自于错误的判断。在看着别人走过的路时,思考怎么走自己的路。无私奉献不是天方夜谈,有时候,我们也可以做到。
展开
-
Bundle 风水 - Android Parcel 序列化与反序列化不匹配系列漏洞
Bundle 风水(Bundle Fengshui)是指在 Android 应用开发中,使用 Bundle 类传递数据时,需要注意一些优化技巧,以避免在传递数据过程中出现性能问题。原创 2023-04-25 11:05:43 · 636 阅读 · 0 评论 -
由View的onAttachedToWindow引发的图片轮播问题探究
本篇文章是在View的postDelayed方法深度思考这篇文章的所有的基础理论上进行研究的,可以说是对于View的postDelayed方法深度思考这篇文章知识点的实践。某天同事某进在做一个列表页添加轮播Banner的需求的时候,发下偶尔会出现轮播间隔时间错乱的问题。我看了他的轮播的实现方案:利用间隔轮播时长每次执行完轮播之后再次循环发送;代码貌似没有太大问题,但通过现象看来应该是失效了~!原创 2023-01-13 16:50:33 · 222 阅读 · 0 评论 -
Android代码静态检查(lint、Checkstyle、ktlint、Detekt)
不同团队的代码的风格不尽相同,不同的项目对于代码的规范也不一样。目前项目开发中有很多同学几乎没有用过代码检测工具,但是对于一些重要的项目中代码中存在的缺陷、性能问题、隐藏bug都是零容忍的,所以说静态代码检测工具尤为重要。原创 2022-12-26 19:50:30 · 995 阅读 · 0 评论 -
AndroidR兼容性适配指南
Android 11基于Android早期版本构建,增加了多种功能和更新,以保障用户安全并提高透明度和可控性。所有开发者都应查看隐私功能并测试他们的应用。具体影响可能会因每个应用的核心功能、目标平台和其他因素而异。原创 2022-12-24 17:13:15 · 1590 阅读 · 0 评论 -
AndroidQ兼容性适配指南
Android 10系统开始 进一步增强了平台功能,为外部存储设备上的应用和用户数据提供了更好的保护。作为这项工作的一部分,平台引入了进一步的改进,以简化向分区存储的转换。原创 2022-12-24 17:06:25 · 2338 阅读 · 0 评论 -
Android逆向第一步之开启root权限
最近看了一些Frida相关的文章,自己也想实际手动来几个逆向操作_。恰巧手头有一款小米8的Android手机(PS:听说是最容易能拿到Root权限的国产机),想着用个把小时搞一下。没到想看了很多文章最终还是搞了一下午。没有一篇文章能让我完完整整的操作下,此刻趟的坑的心情复杂至极,留一片文章淡化一下~!最后说一下root权限和电脑上的管理权限意向,软件获得root权限后,理论上讲可以在手机已安装的软件的权限范围内进行任何操作,记住是任何操作。不要轻易授予应用软件root权限。原创 2022-08-19 20:30:15 · 2058 阅读 · 0 评论 -
非SDK接口自动化检测工具--veridex
在Android P版本,Google对非SDK接口增加了管控。Google提供了一个静态检测工具veridex,工具会扫描 APK 的整个代码库(包括所有第三方库),并报告发现的所有使用非 SDK 接口的行为。原创 2022-03-04 10:27:41 · 9659 阅读 · 0 评论 -
aapt与aapt2--资源id固定和PUBLIC标记
目录前言AAPT概述资源CompileLink查看编译后的资源资源共享ids.xml概述public.xml概述资源id固定`aapt`进行`id`的固定`aapt2`进行`id`的固定R.txt转public.txtPUBLIC标记回顾思考动手实践参考:前言整片文章是围绕 tinker 的 TinkerResourceIdTask 里的知识点进行扩展的。aapt 和 aapt2 的差异(运行环境和运行结果);资源 id 的固定;进行 PUBLIC 的标记;aapt 运行环境为 gradl.原创 2021-07-14 20:12:58 · 947 阅读 · 1 评论 -
ViewPager2+Fragment操作笔记
ViewPager2+Fragment操作笔记文章目录ViewPager2+Fragment操作笔记ViewPager2简介实际操作效果RecycleView和Viewpage2的滑动冲突ViewPager2中Fragment的懒加载懒加载预加载FragmentStateAdapteronCreateViewHolderonBindViewHolderonViewAttachedToWindowFragmentStateAdapter使用获取Fragment实例异常处理ViewPager2滑动监听Tab原创 2021-05-14 10:17:28 · 1745 阅读 · 0 评论 -
修改AAR和Jar中class文件
前言最近帮助同事解决了一个比较棘手的问题,一路采坑的过程比较有意思。在此记录下来。(PS:主要原因是项目比较大,我们只有整个Android项目部分业务侧代码的开发权限。所以解决问题的一些解决问题的常规手段无法使用。)问题需求:Web页面中H5和native交互,保存base64图片。问题:使用现有的已经封装好的Hybrid协议,在最后集成测试发现部分手机无法保存成功。调试发现H5中使用原有的协议格式调用新协议,无法触发业务侧native注册的新协议的日志和断点。怀疑原有的协议格式问题,当.原创 2021-01-26 19:28:11 · 995 阅读 · 0 评论 -
Android8.0隐式广播和自定义签名权限
前言记录一下今天同事给我分享的比较有意思的Bug,在已有的已经在AndroidManifest.xml中注册的广播在部分手机上无法通过Action隐式启动。上网搜搜资料自己写了个Demo,Mark一下!!Android官网:Oreo后台执行限制我们这里主要看对于广播的影响,摘抄一段官网上的介绍:广播限制如果应用注册为接收广播,则在每次发送广播时,应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播,则会引发问题:触发广播的系统事件会导致所有应用快速地连续消耗资源,从而降低用户体验.原创 2021-01-26 09:30:19 · 1124 阅读 · 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 进行增量编译 feat原创 2021-01-11 17:21:35 · 9471 阅读 · 0 评论 -
DiffUtil和它的差量算法
DiffUtil和它的差量算法前言学习Myers'Diff 算法是从 DiffUtils 源代码开始的,但DiffUtil和它的差量算法这篇却是文章是在写完 Myers‘Diff之贪婪算法 和 Myers‘Diff之线性空间细化 这两篇算法文章之后着手的。比较先需要学会算法才能理解代码实现并更好的进行使用。文章目录DiffUtil和它的差量算法前言DiffUtil介绍DiffUtil.DiffResultDiffUtil.DiffResultDiffUtil使用DiffUtil中Myers算法代码原创 2020-10-16 20:08:49 · 1721 阅读 · 0 评论 -
App Startup 源码分析
文章目录集成接入实现初始化组件设置AndroidManifest条目手动初始化组件禁用单个组件的自动初始化禁用所有组件的自动初始化手动调用组件初始化程序运行Lint检查源码分析lint.jarAndroidmanifest.xmlInitializationProviderAppInitializerApp Startup总结上篇文章 非侵入试获取Context进行SDK初始化 讲述了通过ContentProvider 进行 SDK 的初始化,文章末尾引出了 App Startup 。如果一个 app .原创 2020-07-07 19:52:10 · 882 阅读 · 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:19 · 800 阅读 · 0 评论 -
Android内存泄漏检测工具使用手册
性能优化除过我们平时自己设计和开发之外就得考虑使用工具进行检测。Android关于能够定位和剖析问题的内存工具有很多,但不是每个工具所有场景都能覆盖到。这篇文章主要介绍LeaKCanary、shark、Android Profile、MAT、Jhat、dumpsys meminfo、GC Log等。原创 2020-06-05 20:01:50 · 2830 阅读 · 0 评论 -
【总结】Android的16ms和垂直同步以及三重缓存
手机屏幕是由许多的像素点组成的,每个像素点通过显示不同的颜色最终屏幕呈现各种各样的图像。手机系统的类型和手机硬件的不同导致UI的流畅性体验个不一致。原创 2018-04-26 19:55:30 · 4600 阅读 · 3 评论 -
Bitmap图片压缩,大图加载防止OOM
文章目录前言RGB介绍图片占用内存的计算读取位图尺寸和类型内存中如果加载一张 `500*500` 的 `png` 高清图片.应该是占用多少的内存?如果这个图片为本地资源图片,是否还是0.95MB呢?Bitmap压缩压缩原理压缩Bitmap磁盘占用空间的大小压缩Bitmap占用内存的大小使用inSampleSize进行压缩使用createScaledBitmap或MatrixBitmapFacto...原创 2020-04-22 15:08:58 · 1900 阅读 · 4 评论 -
Android中的数据库连接池
最近在看数据库相关的三方库的时候,我发现在Android应用开发的时候是可以并行操作数据库的读写,但Android默认的数据连接池中只有一个数据库链接。一个数据库连接能实现并发么?要是一个数据库链接可以实现并发,那么为什么需要数据库连接池?数据库连接池介绍每次提到连接池我们很快能想到线程池。线程池的创建可以减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。数据库连接...原创 2019-11-02 20:20:31 · 3004 阅读 · 3 评论 -
View的postDelayed方法深度思考
突然某天好友老瑞问我。当时听到这个问题时候我只能联想到,与此同时让我回想起了之前的一些疑问?如果上面的问题大家知道答案,那么文章大家可以快速阅读。如果不是,那么我们脑海中可以带着问题跟着我的思路去一步步学习和理解相关的知识点,最后回过头来自己再回答这些问题。网上搜索资料找到一篇 [] 文章,自己感觉从中学到很很多知识。本篇文章是我结合Android源码在此基础之上进行了思考和分析,文章内容也包含这篇资料所讲的内容。关于Handler和Looper的大部分知识在以前的文章讲的比较详细,这里讲的比较省略。原创 2019-10-25 16:26:29 · 3905 阅读 · 4 评论 -
Android动画绘制原理(源码解析)
Android 平台提供了三类动画,一类是 Tween 动画-Animation,即通过对场景里的对象不断做图像变换 ( 平移、缩放、旋转 ) 产生动画效果;第二类是 Frame 动画,即顺序播放事先做好的图像,跟电影类似。最后一种就是3.0之后才出现的属性动画PropertyAnimator。想知道动画与界面渲染与屏幕刷新有着什么样的关系?想知道属性动画为什么会发生内存泄露么?原创 2018-05-01 00:02:16 · 1587 阅读 · 0 评论 -
Android系统的编舞者Choreographer
个人博客地址 http://dandanlove.com/前言上一篇文章 Android的16ms和垂直同步以及三重缓存 解释了手机流畅性的问题,并在文章中提到了在Android4.1中添加的Vsync。Choreographer机制,用于同Vsync机制配合,实现统一调度界面绘图。Choreographer的构造Choreographer是线程级别的单例,并且具有处理当前线程...原创 2018-04-26 19:59:20 · 6103 阅读 · 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:13 · 1577 阅读 · 2 评论 -
深入解析AIDL的实现:Messenger
Messenger可以翻译为信使,顾名思义,通过它可以在不同进程中传递Message对象,在Message中放入我们需要传递的数据,就可以轻松地实现数据的进程间传递了。Messenger是一种轻量级的IPC方案,它是AIDL在Android中的一种经典实践。文章主要讲述Messenger利用AIDL进行进程间通信,其中不免会涉及到AIDL的知识点。原创 2017-07-10 14:38:33 · 1050 阅读 · 0 评论 -
Android类加载之PathClassLoader和DexClassLoader
Dalvik虚拟机加载的dex文件。dex文件是Android对与Class文件做的优化,以便于提高手机的性能。可以想象dex为class文件的一个压缩文件。dex在Android中的加载和class在jvm中的相同都是基于双亲委派模型,都是调用ClassLoader的loadClass方法加载类。原创 2017-02-23 16:31:47 · 3243 阅读 · 2 评论 -
Android之NDK开发初体验
作为Android开发人员,没有接触过NDK开发也接触过so文件吧。其实NDK编程也没有看来的那么隐秘,今天我们来看看咱们利用NDK来写出自己的so文件原创 2017-03-25 00:50:07 · 7483 阅读 · 0 评论 -
又一年对Android消息机制(Handler&Looper)的思考
前言Android消息机制对于每一个Android开发者来说都不陌生,在日常的开发中我们不可避免的要经常涉及这部分的内容。从开发角度来说,Handler是Android消息机制的上层接口,这使得在开发过程中只需要和Handler交互即可。Handler的使用过程很简单,通过它可以轻松的将一个任务切换Handler所在的线程中去执行。很多人认为Handler的作用是更新UI,这的确没错,但……原创 2017-06-25 22:37:43 · 1578 阅读 · 1 评论 -
Activity中的Window的setContentView
这篇文章距离现在已经两年的时间了。当初自己刚毕业工作不久,才开始接触Android,有一天中午和同事一起吃饭的时候,一个大牛问我你思考过Activity的setContentView是怎么执行的么。当初就因为这个问题我接入到了Android源码。两年时间过去了现在回过头来看,感觉自己写得有很多的不足,本次再补充一下。前言这几天正在进行初级自定义组件的学习,一不小心想到了view到底是怎...原创 2015-10-13 11:00:37 · 2349 阅读 · 0 评论 -
Android创建.aidl文件
今天自己学习关于夸原创 2014-08-06 10:10:25 · 1367 阅读 · 0 评论 -
Android里的onTouch事件的分发与消费
简单讲述:Android里的onTouch事件的分发与消费初学Android将近一年的时间了,由于一开始就是工作性学习(没有系统的学习)。所以一般接触最多的就是组件的使用,而自己在接触比复杂的组件或者Android其他相关知识的时候总是感觉比较吃力,嗯,就是比较吃力,想要研究研究却不知道从哪里下手,现在想写一些基础的东西来系统的了解一下Android。在看到Android的窗口管理机制当中的一些知识原创 2015-10-26 17:06:09 · 1251 阅读 · 0 评论 -
Android关于VideoView的一些思考和总结
最近在做一期有关于视频的项目开发。因为项目周期比较紧,而且自己以前也没有对于视频相关的经验积累。所以在开发的时候遇到了问题,自己尝试解决并记录下来。(PS:视频都是下载完再进行播放类似于微信朋友圈的视频功能,播放组件用的是分装的原生的VideoView)原创 2016-05-31 10:05:39 · 7899 阅读 · 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:09 · 2907 阅读 · 0 评论 -
Android网络之HttpUrlConnection和Socket关系解析
多年以前Android的网络请求只有Apache开源的HttpClient和JDK的HttpUrlConnection,近几年随着OkHttp的流行Android在高版本的SDK中加入了OkHttp。但在Android官方文档中推荐使用HttpUrlConnection并且其会一直被维护,所以在学习Android网络相关的知识时我们队HttpUrlConnection要有足够的了解。。。。原创 2016-07-18 00:39:15 · 7165 阅读 · 1 评论 -
Retrofit2.0中注解使用套路
之前有讲过Retrofit2.0的简单使用和解析。最近在做Retrofit替换之前使用的AsyncHttpClient,在替换的过程中遇到一些之前忽视的小细节。自己感觉知道这几点在开发中灵活使用Retrofit非常有好处。说说Retrofit中的注解 @Query,@QueryMap,@Field,@FieldMap,@FormUrlEncoded,@Path,@Url 这七种注解。原创 2016-08-30 19:14:52 · 21673 阅读 · 5 评论 -
Retrofit2.0+Okhttp不依赖服务端的数据缓存
随着Retrofit在项目中的使用,替换的以前使用的网络框架,相关的缓存机制也要进行替换,网络上大部分的Retrofit+okhttp缓存资料都是进行针对所有url的而且需要服务端的配合。有些时候是先有服务然后app去调用这些服务,所以这个时候没有服务端的配合我们在前端实现缓存比较空难但并不是很可以。原创 2016-09-18 19:45:23 · 2566 阅读 · 0 评论 -
Serializable和Parcelable的再次回忆
序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计里面更为显著。恰当的序列化协议不仅可以提高系统的通用性、强健性、安全性、优化系统性能,而且会让系统更加易于调试、便于扩展。总而言之搞原创 2016-10-18 10:55:02 · 3814 阅读 · 3 评论 -
Android:IPC之AIDL的学习和总结
为了使得一个程序能够在同一时间里处理许多用户的要求。即使用户可能发出一个要求,也肯能导致一个操作系统中多个进程的运行(PS:听音乐,看地图)。而且多个进程间需要相互交换、传递信息,IPC方法提供了这种可能。IPC方法包括管道(PIPE)、消息排队、旗语、共用内存以及套接字(Socket)。原创 2016-10-27 17:33:34 · 3328 阅读 · 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:59 · 3083 阅读 · 0 评论 -
linkToDeath机制了解和使用
往往是由于服务端进程意外停止了,这时我们需要重新连接服务。那么我们可以使用linkToDeath机制,如果使用bindService那么还可以通过ServiceConnection.onServiceDisconnected方法进行重连。原创 2016-12-21 14:14:51 · 13396 阅读 · 0 评论 -
Service之onStartCommand剖析笔记
Service是我们学习Android的基石之一,它在移动应用程序中使用非常广泛。比如应用定位,push消息,内存流量监听等等。 记得大四那年在公司实习的时候,我做的第一个调研就是怎么让接受服务器push的Service不被kill掉(或kill后实现重新启动)。在调研的过程中就了解到如果Service的onStartCommand方法返回值为START_STICKY时。。。。原创 2016-12-28 20:47:51 · 750 阅读 · 0 评论