4.6-android进阶
文章平均质量分 97
fei20121106
这个作者很懒,什么都没留下…
展开
-
(4.6.15.4)Choreographer全解析
一、前情提要1.1 测绘流程的起点我们在4.1.37.1)深入理解setContentView过程和View绘制过程一文中,我们讲到了测绘流程的起点是在—ViewRoot类的requestLayout()方法—scheduleTraversals()—mChoreographer.postCallback(Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null)请求刷新信号—mChoreographer内部handler通过msg机原创 2021-05-13 12:26:21 · 541 阅读 · 0 评论 -
(4.6.14.6)Android App Bundle动态化方案
文章目录一、Google减少应用包体积方案演进1.1 单APK时代1.2 Multiple APK1.3 Android App Bundle1.3.1 dynamic feature1.3.2 Split APKs(Android5.0)1.3.2.1 PackageInstaller1.3.3 Split APKs加载原理1.3.3.1 ClassLoader1.3.3.2 Resources1.3.3.3 不支持四大组件的新增1.3.3.4 多进程问题二、爱奇艺动态化框架Qigsaw2.1 背景知识2原创 2021-01-12 13:57:23 · 685 阅读 · 0 评论 -
(4.6.25.2)Android中为什么主线程不会因为Looper.loop的死循环卡死
线程中死循环本来就是没问题的,可以稳定运行ANR是由于Message执行超时卡死的Looper.loop的死循环其实是托管,实现了事件驱动,正常响应各种消费事件要完全彻底理解这个问题,需要准备以下4方面的知识:Process/Thread,Android Binder IPC,Handler/Looper/MessageQueue消息机制,Linux pipe/epoll机制。总结一下主要有3个疑惑:Android中为什么主线程不会因为Looper.loop()里的死循环卡死?.原创 2020-06-16 12:00:34 · 211 阅读 · 0 评论 -
(4.6.25)Android ANR源码原理分析
ANR即Application Not Responding,顾名思义就是应用程序无响应。在Android中,一般情况下,四大组件均是工作在主线程中的,Android中的Activity Manager和Window Manager会随时监控应用程序的响应情况,如果因为一些耗时操作(网络请求或者IO操作)造成主线程阻塞一定时间(例如造成5s内不能响应用户事件或者BroadcastReceiver的onReceive方法执行时间超过10s),那么系统就会显示ANR对话框提示用户对应的应用处于无响应状态。一原创 2020-06-16 11:42:18 · 379 阅读 · 0 评论 -
(4.6.10.3)Binder传输数据大小限制
61 概述611 项目经理必须具备的技能6111 人际关系技能 116112 领导风格与管理风格6113 权力6114 冲突612 项目团队工作分配与激励62 涉及过程621 规划人力资源管理622 组建项目团队623 建设项目团队624 管理项目团队63 输入输出64 工具技术641 规划人力资源管理 5642 组建项目团队 5643 建设项目团队 7644 管原创 2020-06-15 00:10:26 · 509 阅读 · 0 评论 -
(4.6.10.2)Android LoadedApk详解
文章目录一、LoadedApk的构建函数和成员变量二、LoadedApk的在ActivityThread中的获取三、LoadedApk的mApplication创建Application实例四、LoadedApk的mResources创建Resources实例是ActivityThread中进行四大组件等启动过程中的重要中间变量LoadedApk对象是APK文件在内存中的表示。 Apk文件的相关信息,诸如Apk文件的代码和资源,甚至代码里面的Activity,Service等组件的信息我们都可以通过此原创 2020-05-30 18:11:51 · 3908 阅读 · 0 评论 -
(4.6.12)Android Resource详解
参考文献Android资源访问机制–getResource()Android插件化之-Resource Hook原创 2020-05-28 12:22:54 · 807 阅读 · 0 评论 -
(4.6.32) LayoutInflater详解
参考文献LayoutInflater——你应该知道的一点知识原创 2020-04-26 12:31:03 · 375 阅读 · 0 评论 -
(4.6.22.5)来吧,是时候撸一份自己的RxJava框架啦:强撸为eventbus
RxJava和EventBus的区别,无非就是EventBus的全局可达性实现思路消费页面页面入口处,从全局变量中获取到 对应的 业务控制器,并 加入消费者生产页面调用处,构建一个业务控制器,构建自己的生产者,并将业务控制器存入全局变量实践private static HashMap<String,IPublisher> publishSaved = new HashMap<String,I原创 2016-12-16 18:08:07 · 491 阅读 · 0 评论 -
(4.6.22.4)来吧,是时候撸一份自己的RxJava框架啦:残缺消费者的实现
我们在bind(消费者)的时候,总是要实现onSuccess(T t), onError(Throwable throwable), onFinished()三个方法,但是大部分场景是不需要这么多的,能否只实现部分的消费者函数呢?设计思路定义一个新的 残缺消费者类型, post()时,把残缺消费者,转换为完整消费者即可实践1. 残缺消费者 接口2. bind(残缺消费者的实现) /**原创 2016-12-16 17:50:43 · 382 阅读 · 0 评论 -
(4.6.22)来吧,是时候撸一份自己的RxJava框架啦
RxJava是什么,在这里就不多做赘述了,如果不太懂,请出门google 简单提一下它的优点: 1. 链式调用—不再出现一缕缕的callback,实现代码整洁和良好可读 2. 线程调度—简单一行代码,实现不同函数运行在不同线程 3. 各种操作符-,链式转换-保持链式结构的同时,在传递过程中对数据进行转换,且转换安装顺序实现策略 考虑到一些场景的易读性,本文在描述中混淆了原创 2016-12-16 11:21:12 · 760 阅读 · 0 评论 -
(4.6.22.3)来吧,是时候撸一份自己的RxJava框架啦:装饰器模式实现操作符顺序调用
操作符的原理: 适配器模式(装饰器模式) 3.1 数据结构链式结构的头插法,实现装饰器模式 3.2 头部调用设计思路装饰器模式,实现onObserver代理的通用集成,并持有上一个装换图形实例Publisher .create() .h1 // 创建observer类型的h1, header 和 last指针都指向该节点,h1.pre为null .h2原创 2016-12-16 17:37:52 · 656 阅读 · 0 评论 -
(4.6.22.2)来吧,是时候撸一份自己的RxJava框架啦:代理模式实现线程调度
看了上篇(4.6.22.1)来吧,是时候撸一份自己的RxJava框架啦:观察者模式实现链式调用有木有觉得,线式调用很简单呢? 那么,重头戏来了,我们如何实现线程调度? 就是要借助代理模式,代理模式不懂的话,请转向(2.2.1)设计模式一览系列文章 线程调度的原理: 代理模式。 2.1 所有类的成员函数的调用都不是直接由对应对象实例调用,而是由代理类去调用原创 2016-12-16 15:32:45 · 477 阅读 · 0 评论 -
(4.6.22.1)来吧,是时候撸一份自己的RxJava框架啦:观察者模式实现链式调用
(4.6.22)来吧,是时候撸一份自己的RxJava框架啦 链式调用实现原理: 观察者模式 1.1 控制器 持有 1个生产者 和 多个消费者 1.2 调用生产者的生产函数,并将多个消费者实例注入其中设计思路核心控制器实现 注册事件生产者,并持有生产者实例实现 添加事件的消费者,并持有消费者容器的实例实现 开启整个事件流程,即调用生产者的事件函数,并将消费者们注入其原创 2016-12-16 15:00:17 · 472 阅读 · 0 评论 -
(4.6.21.1)如何唤醒被杀死的android app
1. 静态广播唤醒广播的exported属性和enabled属性exported默认为true表示这个广播可以接收来自其他app发送的广播,只要条件满足,exported设置成false表示只能是这个app内发送的广播才能接收,即使是receiver的进程和发送广播的进程不是同一个,但是只要都是属于一个app的就可以正常接收,有时候会遇到发送者和接收者不在一个进程,广播没办法正常接转载 2016-09-29 11:54:51 · 1745 阅读 · 0 评论 -
(4.6.21)唤醒APP的那些事
移动互联时代,很多互联网服务都会同时具备网站以及移动客户端,很多人认为APP的能帮助建立更稳固的用户关系,于是经常会接到各种从浏览器、webview、短信、甚至是在其他APP中唤醒APP的运营需求。运营推广场景微信、QQ等 -> 唤醒APP用户通过某APP分享了一条链接至微信或QQ,用户B点开该链接后,会引导用户B打开该APP或者下载该APP。浏览器 -> 唤醒APP用户A通过转载 2016-09-28 10:36:11 · 1193 阅读 · 0 评论 -
(4.6.19)Android数据绑定框架DataBinding,堪称解决界面逻辑的黑科技
去年谷歌 I/O大会上介绍了一个非常厉害的新框架DataBinding, 数据绑定框架给我们带来了很大的方便,以前我们可能需要在每个Activity里写很多的findViewById,不仅麻烦,还增加了代码的耦合性,如果我们使用DataBinding,就可以抛弃那么多的findViewById,省时省力。说到这里,其实网上也有很多快速的注解框架,但是注解框架与DataBinding想比还是不好用,转载 2016-09-20 16:26:16 · 422 阅读 · 0 评论 -
(4.6.18)android开发Enum (枚举)的完美替代 —— @IntDef的使用
官方文档说明,安卓开发应避免使用Enum(枚举类),因为相比于静态常量Enum会花费两倍以上的内存。参 http://developer.Android.com/training/articles/memory.html#Overhead 那么如果需要使用Enum应该怎么做呢? https://noobcoderblog.wordpress.com/2015/04/12转载 2016-09-07 15:09:46 · 940 阅读 · 0 评论 -
(4.6.17.7)进程保活(四:5.0以上):-native保活5.0以上方案推演过程以及代码详述
上一篇我们通过父子进程间建立双管道,来监听进程死掉,经过测试,无耗电问题,无内存消耗问题,可以在设置中force close下成功拉起,也可以在获取到root权限的360/cleanmaster下成功存活。可是放到5.0+的系统就不能用了,为什么呢?我们来看源码4.4系统和5.0系统在系统force close的时候都做了什么修改。4.4.3的ActivityM转载 2016-07-25 16:02:01 · 1209 阅读 · 1 评论 -
(4.6.17.6)进程保活(Android的5.0分界线):Android5.0以上版本的force close到底发生了什么改变?
在阅读本篇之前,你首先需要大概清楚一点,无论是系统杀(android机型上长按home键中清除),或者是他杀(第三方管理软件,如360,腾讯等)。其实现方法,基本都是借助ActivityManagerService的removeLruProcessLocked,改变主要也是在这里一、 先看代码有啥不同5.0以下我们先来看看Android4.4的源码,ActivityManagerService原创 2016-07-29 16:16:59 · 2760 阅读 · 2 评论 -
(4.6.17.2)进程保活(一补录、双服务和双进程):保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护
本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护第一部分:一、Service简介:Java.lang.Object ↳Android.content.Context ↳android.content.ContextWrapper ↳android.app.ServiceService是应用程序A转载 2016-07-18 17:35:08 · 2014 阅读 · 0 评论 -
(4.6.17.3)进程保活(二、Android层面的不足):细数利用android系统机制的保活手段
年前就开篇了android进程常驻,但是一直琐事不断,也一直没有静下心来整理,只是把项目传到的github,有好多朋友会来问我其中实现原理,其实也是一点一点推演过来的。我的想法就是按照我当时的推演过程,按顺序写完这几篇博客,也算是对那一个月努力的一个交代。上一篇讲了系统管理进程和强杀进程的过程原理,今天就开始想一下,在此基础上,如何实现保活,当然作为一个android开发,最先转载 2016-07-18 16:48:58 · 724 阅读 · 0 评论 -
(4.6.23.2)Android之面向切面编程:Aspect集成示例之DebugTrace 与 SecurityCheckAnnotation
一集成方法一二集成方法二三DebugTrace1 定义注解DebugTrace1 计时工具类3 切面编程四SecurityCheckAnnotation1 定义注解2 定义切面参考文献一、集成方法一需要在项目根目录的build.gradle中增加依赖:buildscript { repositories { jcenter() } dep原创 2017-04-20 18:02:48 · 954 阅读 · 0 评论 -
(4.6.23.3)Android之面向切面编程:Aspect示例之继承关系测试
JoinPoint获取的参数是值or引用execution 与 call的不同hook基类基类被锁定子类是否也满足 切入点hook基类重载函数的锁定是否跟super有关是证明了如果有super父类的函数也会被视作切入点 会先执行如果切入点的函数有返回值就不可以用void方式去around切入否则编译失败日志MainActivity 全部工具切面环境实体类1. JoinPoint获取的原创 2017-04-20 18:38:01 · 1225 阅读 · 0 评论 -
(4.6.23.1)Android之面向切面编程:AOP 与 Aspect简介
一OOP的困境1 OOP2 从打印日志来看AOP 和 OOP二适用AOP的场景三工具和库四AspectJ简介五AOP概念介绍1 Join Points 何处支持注入2 Pointcuts定位想要注入的具体连接点21 Pointcuts基本结构22 Joinpoint类型的直接选择221 Joinpoint类型一览222 定位正则2221 Method Signatur原创 2017-04-20 16:38:35 · 3647 阅读 · 0 评论 -
(4.6.31)Android Bitmap 详解
文章目录一、从相册加载一张图片1.1 打开相册加载图片1.2 根据Uri得到Bitmap二、Bitmap 内存计算方式2.1 density 和 densityDpi2.2 getByteCount处理格式字节2.3 Density处理转换映射字节2.4 精度调整三、想办法减少 Bitmap 内存占用3.1 Jpg 和 Png3.2 压缩图片方案一(Compress)压缩文件3.3 压缩图片方案二...原创 2018-11-13 17:46:22 · 961 阅读 · 1 评论 -
(4.6.29.5)插件化之代码加载:Dynamic-Load-Apk
文章目录一、概述1.1 DL对activity生命周期管理的改进1.2 DL对类加载器的支持1.3 DL对宿主(host)和插件(plugin)通信的支持1.4 DL对插件独立运行的支持1.5 DL对activity随意跳转的支持(DLIntent)和 对插件管理的支持(DLPluginManager)二、利用DL框架进行开发的步骤2.1 引入2.2 插件2.3 host三、源码解析3.1 核心概...原创 2018-10-23 10:18:09 · 302 阅读 · 0 评论 -
(4.6.30.1)组件化:Application离散式注册方案
文章目录一、Application功能分析二、问题分析三、入侵生命周期的离散式实现四、全局单例模式的离散式使用Application离散式注册方案一、Application功能分析在Android开发当中,一个APP有且只能有一个全局的Application对象,而且如果需要自定义的话,必须在AndroidManifest.xml中配置Application的使用主要涉及以下两个功能:...原创 2018-10-23 10:00:45 · 347 阅读 · 0 评论 -
(4.6.30)组件化:Android项目构架演变之路
文章目录一、简单开发模型二、单工程开发模型(业务逻辑分层模型)2.1 简单开发模型的宏观分层2.2 MOA原架构模型2.3 业务层的分层理念与设计模式2.3.1 分层理念2.3.2 MVC模式2.3.3 MVP模式三、组件模型3.1 为什么推进组件化?3.1 组件化?模块化?插件化?3.2 主App多Lib开发模型3.3 主App多子App开发模型四、组件化过程关键点4.1 组件切分和代码隔离4....原创 2018-10-23 09:52:11 · 1113 阅读 · 0 评论 -
(4.6.29)Android插件化框架总结
文章目录一、概述为什么需要插件化?1.1 发展历史1.2 需要知识1.2.1 Binder1.2.2 App打包流程1.2.3 App安装流程1.2.4 App启动流程1.2.5 资源加载机制1.2.6 Gradle配置打包1.3 主流框架Dynamic-load-apk详解DroidPlugin详解Small框架详解参考文献文章目录一、概述为什么需要插件化?1.1 发展历史1.2 需要知识1....原创 2018-10-23 09:26:15 · 721 阅读 · 0 评论 -
(4.6.29.3)插件化之代码加载:启动Activity等四大组件之hook方式
我们上文提到了,必须在Manifest中注册后才能以标准Intent的方式启动的,这一部分的实现其实是通过 framework层的java代码进行实现的那么这是否就意味着,我们通过hook一些关键的代码,就可以实现让PlugActivity看上去就和注册过的Activity一样,从而正常的启动?这里需要的就是 动态代理的hook机制代理模式和Hook原理Hook 原理整...原创 2018-06-29 17:57:41 · 1438 阅读 · 0 评论 -
(4.6.29.1)插件化:Android中的动态加载技术
关联:(4.1.53)Android ClassLoader解析 关联:(2.1.1.5)Java ClassLoader详解一、动态加载技术的作用与缺点二、动态加载的类型三、Android动态加载的大致过程3.1 动态加载 so库3.2 动态加载 dex/jar/apk文件3.2.1 简单的动态加载模式3.2.2 代理Activity模式3.2.3 动态创建A...原创 2018-06-15 16:19:15 · 359 阅读 · 0 评论 -
(4.6.29.2)插件化之代码加载:启动Activity
一、代理Activity模式1.1 用反射调用插件Activity相应生命周期1.2 把插件Activity的生命周期抽象成接口,在ProxyActivity的生命周期里调用二、动态创建Activity2.1 dexmaker 和 asmdex 动态生成类2.1.1 使用dexmaker动态创建一个类2.2 修改需要启动的目标Activity2.3 动态类创建Activi...原创 2018-06-23 11:22:32 · 553 阅读 · 0 评论 -
(4.6.29.4)插件化之资源加载:使用插件中的R资源
一、主app中使用插件中资源1.1 创建新的Resource对象方式1.1.1 背景知识资源链Resources对象1.1.3 实现思路addAssetPath的反射调用1.1.4 具体实现1.1.5 加载离线apk中的字符串和Drawable资源1.1.6 加载离线apk中的layout资源直接替换当前context的mResources私有成员变量...原创 2018-06-22 15:12:58 · 2193 阅读 · 0 评论 -
(4.6.28)关于Android 64K引发的MultiDex你想知道的都在这里:一场由启动黑屏引发的惨案
如果你的应用不支持5.0以下的Dalvik VM 那么你没有必要看这篇文章 本文内容由个人按照个人理解,汇总自《参考文献》所示文章,有兴趣者可自行查看相关参考文献Android分包方案Multidex的相关个人理解,不正之处欢迎指正。口袋助理是一款移动办公OA,支持手机APP和网页版。目前超过200万家企业正在使用。手机考勤、销售人员外勤管理、客户CRM、销售项目管理、移动日志、流原创 2018-02-05 15:15:54 · 1648 阅读 · 0 评论 -
(4.6.27)Android启动优化之打造秒开应用
一背景二冷启动过程三Window Background1 APP启动时白屏黑屏Activity打开时白屏黑屏2 秒开方案21 设置自定义带windowBackground的Theme22 为你的launcher Activity设置你的启动Theme一、背景在开发过程中,发现每次点击桌面app图标之后,都有一个在明显的桌面等待时间,机型越低端的越明显,因此考虑进行优化解决。[图片太大]从原创 2017-10-24 15:27:32 · 496 阅读 · 0 评论 -
(4.6.25)Android动态更换应用Icon之玩转桌面图标
一原理解析1 原理1activity-alias2 原理2PMsetComponentEnabledSetting二动态更换桌面icon三远程控制图标的实现方式四多入口实现方式 快捷方式入口五其他参考文档时不时的我们就会发现,一些我们常见的应用,比如某宝,某东,在一些特殊的日子中,比如双十一、元旦,为了迎合这样一个日子的气氛,在桌面的应用图标就会发生改变,再譬如一些理财产品在举办一些原创 2017-10-24 15:10:02 · 1523 阅读 · 2 评论 -
(4.6.11.10)FreeLine集成方法
为什么使用freeline—-随时可以切换常规全量编译和增量编译 全量编译:重新构建整个app,时间上和默认的as编译是一样的 增量编译:使用freeline的编译方式,时间很快Freeline支持的增量编译场景一、 确认python环境,如果没有请自行安装建议2.7+版本 可以通过 cmd下的 python查看当前python版本号二、集成Freeline项目的build.grad原创 2016-12-10 17:32:45 · 1007 阅读 · 0 评论 -
(4.6.24)Lambda表达式 in Android
引入使用Lambda在Android中替代匿名类基本语法官方示例设置监听事件实现Runnable函数式接口Functional interfacesLambda和匿名内部类的区别参考文献 就目前而言,Lambda的向后兼容性和稳定性都是不可预测和无法保障的,因此并不建议在企业项目中使用引入为了支持函数式编程,Java 8引入了Lambda表达式,Android N已经开始支持J原创 2017-09-15 10:34:24 · 425 阅读 · 0 评论 -
(4.6.26)Android特殊系统的校验方式
一背景二特殊系统校验三其他1 小米系统的类推2 安卓系统的buildprop部分代码参考文档公司产品集成了魅族推送平台,但是该平台并未在大部分魅族手机上启用,往往需要用户在主动反馈后,并由客服手动切换为魅族推送平台通过进一步的调试,我们发现其内部原因就在于 魅族系统的校验。 我们都知道,现在Android系统手机各式各样,包括三星、华为、小米、魅族等等,它们的系统都不是原生的Andro原创 2017-10-24 15:20:00 · 745 阅读 · 0 评论