![](https://img-blog.csdnimg.cn/72b0552aa21342aebb640e9e8e742a38.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android框架
文章平均质量分 90
分析Android源码框架及使用问题
看书的小蜗牛
这个作者很懒,什么都没留下…
展开
-
APP隐私合规现状与防范措施
2021年11月1《个人信息保护法》正式施行,标志信息保护进入**强监管**时代,同时,APP监管也被提升到前所未有的高度,数据安全、用户隐私、甚至功能体验等各个方面都出台了相应的规则规范,监管的初衷是:从各个层面保障用户的权益,避免用户的隐私、体验、数据被滥用,甚至威胁国家安全,一旦违规被查处面临的惩罚是非常严厉的,因此产品运营方必须高度重视。一方面,在产品设计、开发阶段就要充分考虑并满足各种监管要求;另一方面,一旦查出隐患问题,要积极响应,及时整改,否则可能面临工信部通报,甚至全面下架风险,首当其冲的一原创 2022-12-07 15:50:02 · 2725 阅读 · 0 评论 -
APP端上通用安全体系建设
背景:APP端上安全在谈什么APP的每个业务场景都有其既定的运行模式,若被人为破坏就可认为是不安全的。举个栗子,比如秒杀场景:大量用户在特定时间点,通过点击抢购来秒杀优惠商品,从而营造一种紧迫而有噱头的营销场景,但如果能通过非法手段自动抢购、甚至提前开始刷接口抢购,那就彻底破坏了业务的玩法,这就是一种不安全的运行模式。再比如常用的用户拉新场景:新客获取成本高达200左右,所有产品的拉新投入都蛮高,如何获得真正的新用户而不是羊毛党也是拉新必须处理的事,一般而言,新设备+新账户是新用户的基本条件,但新账户的成原创 2022-06-15 14:24:21 · 755 阅读 · 2 评论 -
APP冷启动优化:如何使用好工具【Perfetto\ systrace \MethodTracing\】
APP的性能提升无非就是围绕稳定、流畅之类的指标做文章,在推动性能提升的时候,什么才是关键,热情?能力 ?规范?,个人认为是工具,用好性能分析工具,性能提升就走完了一大半,就好比:”算数我比不过小王,但我找了个电子计算器“。以提升冷启动速度为例,看看整体的性能优化流程应该是什么样子,而在这其中性能工具能带来什么。冷启动的定义与可优化的点如何衡量当前的性能指标,个人感觉,性能的衡量分三步: 指标制-> 指标采集 -> 性能基线与优劣评级, 以上三块组成性能量化工具,有了量化工具,就可以说AP原创 2021-10-29 15:23:19 · 1218 阅读 · 0 评论 -
Android Native Crash问题排查思路
背景:定位难对于Android APP而言,native层Crash相比于Java层更难捕获与定位,因为so的代码通常不可见,而且,一些第三方so的crash或者系统的更难定位,堆栈信息非常少:参考下面的几个native crash实例甚至即时全量打印Log信息,也只能得到一些不太方便定位的日志,无法直接定位问题09-14 10:14:36.590 1361 1361 I /system/bin/tombstoned: received crash request for pid 590809原创 2021-10-08 14:24:55 · 3162 阅读 · 0 评论 -
APP路由框架与组件化简析
前端开发经常遇到一个词:路由,在Android APP开发中,路由还经常和组件化开发强关联在一起,那么到底什么是路由,一个路由框架到底应该具备什么功能,实现原理是什么样的?路由是否是APP的强需求呢?与组件化到底什么关系,本文就简单分析下如上几个问题。路由的概念路由这个词本身应该是互联网协议中的一个词,维基百科对此的解释如下:路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动。路由发生在OSI网络参考模型中的第三层即网络层。个人理解,在前端开发中,路由就是通过一串字符串映射原创 2021-06-15 14:39:09 · 286 阅读 · 0 评论 -
Android线上轻量级APM性能监测方案
Github 链接 Collie App性能如何量化如何衡量一个APP性能好坏?直观感受就是:启动快、流畅、不闪退、耗电少等感官指标,反应到技术层面包装下就是:FPS(帧率)、界面渲染速度、Crash率、网络、CPU使用率、电量损耗速度等,一般挑其中几个关键指标作为APP质量的标尺。目前也有多种开源APM监控方案,但大部分偏向离线检测,对于线上监测而言显得太重,可能会适得其反,方案简单对比如下:SDK现状与问题是否推荐直接线上使用腾讯matrix功能全,但是重,而且运行测试期原创 2020-09-21 10:57:22 · 2148 阅读 · 0 评论 -
Android推送的群魔乱舞
前言国内的Android推送就是个悲剧国内Android缺少Google的生态,如Google的Paly Store,Google Mobile Services(GSM)等,导致衍生出很多畸形的产业,比如五花八门的APP市场,光怪陆离的推送平台,这里要说的是推送平台。Google本身的GSM服务是包含一套推送在里面的,跟iOS系统的推送类似,它保证每台手机维护一个推送通道就能收到各方推送,但由于Google没法进入中国市场,国产Android基本上算被阉割了一个核心部件,由此衍生的种种弊端数不胜数,首原创 2020-07-23 14:03:37 · 1705 阅读 · 2 评论 -
Android VSYNC与图形系统中的撕裂、双缓冲、三缓冲浅析
先接触两个图形概念: 帧率(Frame Rate,单位FPS)–GPU显卡生成帧的速率,也可以认为是数据处理的速度), 屏幕刷新频率 (Refresh Rate单位赫兹/HZ):是指硬件设备刷新屏幕的频率。屏幕刷新率一般是固定的,比如60Hz的每16ms就刷一次屏幕,可以类比一下黑白电视的电子扫描枪,每16ms电子枪从上到下从左到右一行一行逐渐把图片绘制出来,如果GPU显卡性能非常强悍,帧率可以非.........原创 2020-02-06 15:03:53 · 4861 阅读 · 1 评论 -
Android VSYNC (Choreographer)与UI刷新原理分析.md
从UI控件内容更改到被重新绘制到屏幕上,这中间到底经历了什么?另外,连续两次setTextView到底会触发几次UI重绘呢?为什么Android APP的帧率最高是60FPS呢,这就是本文要讨论的内容。以电影为例,动画至少要达到24FPS,才能保证画面的流畅性,低于这个值,肉眼会感觉到卡顿。在手机上,这个值被调整到60FPS,增加丝滑度,这也是为什么有个(1000/60)16ms的指标,一般而言...原创 2020-01-10 23:20:59 · 676 阅读 · 0 评论 -
Android 混合开发之JsBridge
电商或者内容类APP中,H5通常都会占据一席之地,Native跟H5通信会必不可少,比如某些场景H5通知native去分享,native通知H5局部刷新等,Android本身也提供这样的接口,比如addJavascriptInterface、loadUrl(“javascript:…”),而需要支持的能力也要是双工的。1:H5通知Native(可能需要处理回调),2:Native通知H5(也...原创 2019-11-18 09:41:08 · 1530 阅读 · 0 评论 -
Android 后台限制启动Service、Activity与Notification、PendingIntent浅析
Android O之后,很多后台启动的行为都开始受限,比如O的时候,不能后台启动Service,而在Android10之后,连Activity也加到了后台限制中。在Android O 后台startService限制简析中,层分析Android O之后,后台限制启动Service的场景,一般而言,APP退到后台(比如按Home键),1分钟之后变为后台APP,虽然进程存活,但是已经不能通过start...原创 2019-11-18 09:40:31 · 4892 阅读 · 1 评论 -
Android 3G/4G流量上网原理简析
手机一般会提供两种上网方式:Wifi或者3G/4G上网,Wifi上网其实就是利用网卡通过以太网上网;3G/4G则是通过基带,利用蜂窝网络进行上网,之前已经简单的阐述了Wifi上网跟3G上网的区别,本文主要简述Android 3G/4G上网的流程及原理。无线上网硬件模型3G/4G上网协议ppp3G/4G上网流程-ppp如何建立socket如何通过基带模块发送数据、接收数据And...原创 2018-05-10 17:19:46 · 13216 阅读 · 0 评论 -
Android Bitmap变迁与原理解析(4.x-8.x)
App开发不可避免的要和图片打交道,由于其占用内存非常大,管理不当很容易导致内存不足,最后OOM,图片的背后其实是Bitmap,它是Android中最能吃内存的对象之一,也是很多OOM的元凶,不过,在不同的Android版本中,Bitmap或多或少都存在差异,尤其是在其内存分配上,了解其中的不用跟原理能更好的指导图片管理。先看Google官方文档的说明: On Android 2.3.3 ...原创 2018-05-22 14:08:39 · 2588 阅读 · 1 评论 -
Android内容服务ContentService原理浅析
ContentService可以看做Android中一个系统级别的消息中心,可以说搭建了一个系统级的观察者模型,APP可以向消息中心注册观察者,选择订阅自己关心的消息,也可以通过消息中心发送信息,通知其他进程,简单模型如下:ContentService服务伴随系统启动,本身是一个Binder系统服务,运行在SystemServer进程。作为系统服务,最好能保持高效运行,如果不是非常紧急,A...原创 2018-07-16 09:33:33 · 1892 阅读 · 0 评论 -
Android硬件加速(二)-RenderThread与OpenGL GPU渲染
Android4.0之后,系统默认开启硬件加速来渲染视图,之前,理解Android硬件加速的小白文简单的讲述了硬件加速的简单模型,不过主要针对前半阶段,并没怎么说是如何使用OpenGL、GPU处理数据的,OpenGL主要处理的任务有Surface的composition及图形图像的渲染,本篇文章简单说一下后半部分的模型,这部分对于理解View渲染也有不少帮助,也能更好的帮助理解GPU渲染玄学曲线。...原创 2018-08-07 15:19:02 · 7379 阅读 · 3 评论 -
Android Service重启恢复(Service进程重启)原理解析
Android系统中,APP进程被杀后,等一会经常发现进程又起来了,这个现象同APP中Service的使用有很大关系,本文指的Service是通过startService启动的,而不是通binderSertvice启动的,binderSertvice是通Activity显示界面相关的,如果两者统一进程,binderSertvice的影响可以忽略,如果不是同一进程,Service会被重启,毕竟业务都...原创 2018-08-17 13:37:07 · 17159 阅读 · 0 评论 -
Android模拟器识别技术
Android模拟器常常被用来刷单,如何准确的识别模拟器成为App开发中的一个重要模块,目前也有专门的公司提供相应的SDK供开发者识别模拟器。 目前流行的Android模拟器主要分为两种,一种是基于Qemu,另一类是基于Genymotion,网上现在流行用一些模拟器特征进行鉴别,比如:通过判断IMEI是否全部为0000000000格式判断Build中的一些模拟器特征值匹配Qemu的一些特征文件原创 2017-08-04 16:09:55 · 3474 阅读 · 1 评论 -
Android Studio Profiler Memory (内存分析工具)的简单使用及问题分析
Memory Profiler 是 Android Studio自带的内存分析工具,可以帮助开发者很好的检测内存的使用,在出现问题时,也能比较方便的分析定位问题,不过在使用的时候,好像并非像自己一开始设想的样子。如何查看整体的内存使用概况如果想要看一个APP整体内存的使用,看APP heap就可以了,不过需要注意Shallow Size跟Retained Size是意义,另外native消耗的...原创 2019-01-09 09:51:42 · 22777 阅读 · 2 评论 -
Android DEPPLINK、APPLink原理简析
APP开发中经常会有这种需求:在浏览器或者短信中唤起APP,如果安装了就唤起,否则引导下载。对于Android而言,这里主要牵扯的技术就是deeplink,也可以简单看成scheme,Android一直是支持scheme的,但是由于Android的开源特性,不同手机厂商或者不同浏览器厂家处理的千奇百怪,有些能拉起,有些不行,本文只简单分析下link的原理,包括deeplink,也包括Android...原创 2019-01-09 09:52:14 · 3429 阅读 · 1 评论 -
Android GPU呈现模式原理及卡顿掉帧浅析
APP开发中,卡顿绝对优化的大头,Google为了帮助开发者更好的定位问题,提供了不少工具,如Systrace、GPU呈现模式分析工具、Android Studio自带的CPU Profiler等,主要是辅助定位哪段代码、哪块逻辑比较耗时,影响UI渲染,导致了卡顿。拿Profile GPU Rendering工具而言,它用一种很直观的方式呈现可能超时的节点,该工具及其原理也是本文的重点:CPU...原创 2019-01-09 09:52:39 · 3805 阅读 · 0 评论 -
Android可见APP的不可见任务栈(TaskRecord)销毁分析
Android依托Java型虚拟机,OOM是经常遇到的问题,那么在快达到OOM的时候,系统难道不能回收部分界面来达到缩减开支的目的码?在系统内存不足的情况下,可以通过AMS及LowMemoryKiller杀优先级低的进程,来回收进程资源。但是这点对于前台OOM问题并没有多大帮助,因为每个Android应用有一个Java内存上限,比如256或者512M,而系统内存可能有6G或者8G,也就是说,一个A...原创 2019-01-09 09:53:03 · 963 阅读 · 0 评论 -
Android V1及V2签名原理简析
Android为了保证系统及应用的安全性,在安装APK的时候需要校验包的完整性,同时,对于覆盖安装的场景还要校验新旧是否匹配,这两者都是通过Android签名机制来进行保证的,本文就简单看下Android的签名与校验原理,分一下几个部分分析下:APK签名是什么APK签名如何保证APK信息完整性如何为APK签名APK签名怎么校验Android的APK签名是什么签名是摘要与非对称密钥加...原创 2019-05-08 09:59:38 · 737 阅读 · 0 评论 -
Android中mmap原理及应用简析
mmap是Linux中常用的系统调用API,用途广泛,Android中也有不少地方用到,比如匿名共享内存,Binder机制等。本文简单记录下Android中mmap调用流程及原理。mmap函数原型如下:void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize);几个重要参数参数start:指向...原创 2019-05-08 10:01:08 · 750 阅读 · 0 评论 -
Android自定义View:MeasureSpec的真正意义与View大小控制
自定义View是Android开发中最普通的需求,灵活控制View的尺寸是开发者面临的第一个问题,比如,为什么明明使用的是WRAP_CONTENT却跟MATCH_PARENT表现相同。在处理View尺寸的时候,我们都知道最好在onMeasure中设定好自定义View尺寸,那么究竟如何合理的选择这个尺寸呢。直观来说,可能有以下问题需要考虑:自定的View最好不要超过父控件的大小,这样才能保证自己能在原创 2016-12-24 20:32:24 · 1394 阅读 · 0 评论 -
Android wifi上网跟4G上网的区别
手机上网可以用Wifi,也可以用4G,这两者究竟有什么区别,Wifi模块跟4G无限通信模块用的是同一种上网媒介吗,一个4G手机是否两块网卡呢?手机的MAC地址说的是谁的呢,比如,当你通过系统API获取MAC地址的时候,获取的是哪种MAC地址呢?本文由MAC地址(作为设备唯一标识)问题引出,简单分析下两种上网方式的区别,扫盲,高手勿拍砖:Wifi上网跟4G上网用的是同一块“网卡”吗Wifi上...原创 2018-04-03 20:53:26 · 2708 阅读 · 0 评论 -
Android bindService是一个异步过程
Android中bindService是一个异步的过程,什么意思呢?使用bindService无非是想获得一个Binder服务的Proxy,但这个代理获取到的时机并非由bindService发起端控制,而是由Service端来控制,也就是说bindService之后,APP端并不会立刻获得Proxy,而是要等待Service通知APP端,具体流程可简化如下:APP端先通过bindServic原创 2018-01-16 20:49:13 · 4049 阅读 · 1 评论 -
全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”的实现
前言状态栏与导航栏属于SystemUi的管理范畴,虽然界面的UI会受到SystemUi的影响,但是,APP并没有直接绘制SystemUI的权限与必要。APP端之所以能够更改状态栏的颜色、导航栏的颜色,其实还是操作自己的View更改UI。可以这么理解:状态栏与导航栏拥有自己独立的窗口,而且这两个窗口的优先级较高,会悬浮在所有窗口之上,可以把系统自身的状态栏与导航栏看做全透明的,之所有会有背景颜色,是因原创 2017-06-21 09:16:43 · 3228 阅读 · 0 评论 -
Android后台杀死系列之二:ActivityManagerService与App现场恢复机制
系统如何知道Application被杀死了,Android使用了Linux的oomKiller机制,只是简单的做了个变种,采用分等级的LowmemoryKiller,但这个其实是内核层面的,LowmemoryKiller杀死进程后,不会像用户空间发送通知,也就是说框架层的ActivityMangerService无法知道App是否被杀死,但是,只有知道App或者Activity是否被杀死,AMS(ActivityMa原创 2017-01-11 17:41:44 · 4928 阅读 · 1 评论 -
Android后台杀死系列之三:LowMemoryKiller原理(4.3-6.0)
本篇是Android后台杀死系列的第三篇,前面两篇已经对后台杀死注意事项,杀死恢复机制做了分析,本篇主要讲解的是Android后台杀死原理。相对于后台杀死恢复,LowMemoryKiller原理相对简单,并且在网上还是能找到不少资料的,不过,由于Android不同版本在框架层的实现有一些不同,网上的分析也多是针对一个Android版本,本文简单做了以下区分对比...原创 2017-01-13 15:03:47 · 10852 阅读 · 1 评论 -
Android后台杀死系列之一:FragmentActivity及PhoneWindow后台杀死处理机制
App在后台久置后,再次从桌面或最近的任务列表唤醒时经常会发生崩溃,这往往是App在后台被系统杀死,再次恢复的时候遇到了问题,而在使用FragmentActivity+Fragment的时候会更加频繁。比如,如果Fragment没有提供默认构造方法,就会在重建的时候因为反射创建Fragment失败而崩溃。。。原创 2017-01-10 14:04:43 · 5379 阅读 · 0 评论 -
RecyclerView定制:通用ItemDecoration及全展开RecyclerView的实现
Android L面世之后,Google就推荐在开发项目中使用RecyclerView来取代ListView,因为RecyclerView的灵活性跟性能都要比ListView更强,但是,带来的问题也不少,比如:列表分割线都要开发者自己控制,再者,RecyclerView的测量与布局的逻辑都委托给了自己LayoutManager来处理,如需对RecyclerView进行改造,也要对其LayoutManager定制原创 2016-12-27 15:28:50 · 2137 阅读 · 0 评论 -
仿淘宝、京东拖拽上拉下拉商品详情(可嵌套ViewPager、ListView、WebView、FragmentTabhost)
背景对于电商App,商品详情无疑是很重要的一个模块,观察主流购物App的详情界面,发现大部分都是做成了上下两部分,上面展示商品规格信息,下面是H5商品详情,或者是嵌套了一个包含H5详情及评论列表的ViewPager界面,本文就是实现了一个兼容不同需求的上下滚动黏滞View-DragScrollDetailsLayout。DragScrollDetailsLayout GitHub链接 实现效果图首原创 2016-12-23 16:06:59 · 1639 阅读 · 0 评论 -
Android权限管理原理(含6.0-4.3)
Android 4.3-5.1 AppOpsManager动态权限管理(官方不成熟的权限管理)AppOpsManager 是Google在Android4.3-Android5.0引入的动态权限管理方式,但是又与Google觉得不成熟,所以在每个发行版的时候,总是会将这个功能给屏蔽掉。国内一些早期版本的权限动态管理的表现类似,这里用CyanogenMod12里面的实现讲述一下,国内的ROM源码...原创 2016-12-22 14:26:22 · 9421 阅读 · 0 评论 -
深入理解Binder框架-原理及难点
目录 Binder概述 问题引入原理 ServiceManager化身大管家 Service实现逻辑 – Service注册逻辑 – Service自身服务的实现 – Java层Service服务的实现与注册 Client请求的实现逻辑 – 请求ServiceManager获得Service代理 – 请原创 2016-06-29 17:51:36 · 9640 阅读 · 3 评论 -
Android不同层次的手势监听
Android不同层次的触摸事件监听,无论哪个层次都要记得处理手势的拦截与被拦截,如何强制防止拦截,与释放原创 2015-01-22 17:13:06 · 2407 阅读 · 0 评论 -
Android Activity的启动模式分析
面试的时候,面试官经常同你随便侃侃Activity的启动模式,但Activity启动牵扯的知识点其实很多,并非能单单用四个启动模式就能概括的,默认的启动模式的表现会随着Intent Flag的设置而改变,因此侃Activity启动模式大多走流程装逼,最多结合项目遇到的问题,随便刁难一下面试者,并不太容易把控,也许最后,面试官跟面试者的答案都是错了,比如在Service中必须通过设置FLAG_ACTI原创 2017-09-07 15:15:39 · 545 阅读 · 0 评论 -
Android后台杀死系列之四:Binder讣告原理
Binder是一个类似于C/S架构的通信框架,有时候客户端可能想知道服务端的状态,比如服务端如果挂了,客户端希望能及时的被通知到,而不是等到再起请求服务端的时候才知道,这种场景其实在互为C/S的时候最常用,比如AMS与APP,当APP端进程异常退出的时候,AMS希望能及时知道,不仅仅是清理APP端在AMS中的一些信息,比如ActivityRecord,ServiceRecord等,有时候可能还需要及原创 2017-09-07 17:07:26 · 1157 阅读 · 1 评论 -
Android窗口管理分析(3):窗口分组及Z-order的确定
在Android系统中,窗口是有分组概念的,例如,Activity中弹出的所有PopupWindow会随着Activity的隐藏而隐藏,可以说这些都附属于Actvity的子窗口分组,对于Dialog也同样如此,只不过Dialog与Activity属于同一个分组。之间已经简单介绍了窗口类型划分:应用窗口、子窗口、系统窗口,Activity与Dialog都属于应用窗口,而PopupWindow属于子窗口原创 2017-09-08 13:43:40 · 1793 阅读 · 0 评论 -
深入理解Binder通信原理及面试问题
Binder承担了绝大部分Android进程通信的职责,可以看做是Android的血管系统,负责不同服务模块进程间的通信。在对Binder的理解上,可大可小,日常APP开发并不怎么涉及Binder通信知识,最多就是Service及AIDL的使用会涉及部分Binder知识。Binder往小了说可总结成一句话:一种IPC进程间通信方式,负责进程A的数据,发送到进程B。往大了说,其实涉及的知识还是很多的原创 2017-03-15 18:36:33 · 12856 阅读 · 3 评论 -
LayoutInflater 布局渲染工具
LayoutInflater其实是一个布局渲染工具,其本质就只是一个工具,说白了LayoutInflater的作用就是根据xml布局文件构建View树,自定义View的时候经常用到,常用的做法如下: View tmpView= LayoutInflater.from(context).inflate(R.layout.content,container,false);首先通过Lay原创 2018-01-15 18:38:23 · 326 阅读 · 0 评论