自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 【Android】【资源编译、打包】

整体架构 通过AAPT(Android Assert Package Tool)对资源打包,打包前,大部分XML会被编译成二进制,这样可以减小体积与优化解析速度 为了快速定位资源 给每个非Asset资源一个id,他们定义在R.java 生成resources.arsc,即资源索引表,根据...

2019-08-27 22:12:54 198 0

原创 【Android】【框架】【编译】【Freeline】

整体架构 1、核心原理 热更新技术在编译期的应用,后期引用到了线上做热更新 2、稳定性 完善的基线对齐、进程级别异常隔离 3、性能 借鉴Buck多任务并发思想,端口扫描、代码扫描、并发编译、并发dx、并发merge dex,在多核机器上加速明显 在class、dex、resource方面做了缓存...

2019-08-26 23:54:24 194 0

原创 【Android】【框架】【JSON】【fastjson】

整体架构 fastjson和Gson的整体思路一致,实际上大多数语言解析库的思路都是差不多的,即抽象出一个写入写出的转换器,以及一个保存数据的容器 而fastjson的不同之处在于,做了大量的算法优化,使得其解析性能远超其他JSON解析库 SerializeWriter Gson直接采用...

2019-08-25 21:26:53 62 0

原创 【Android】【框架】【JSON】【Gson】

整体架构 核心在于TypeAdapter,它定义了类型和字节之间的相互转换 TypeAdapter public abstract class TypeAdapter<T> { public abstract void write(JsonWrit...

2019-08-25 17:28:17 195 0

原创 【Java】【并发】【线程池】

什么是线程? 可以从《深入理解JVM》得到参考 线程是比进程更轻量级的调度单位,多个线程可以共享进程的资源,而其自身也有独立的资源 主流OS都有其线程实现,而JVM中的线程更为轻量级,并且对不同硬件与OS做了兼容 实现线程有3种方式 有内核线程,由OS来调度 由用户线程,由用户空间自己调度 以及...

2019-08-24 19:49:04 188 0

原创 【Android】【框架】【EventBus】

整体架构 一言以蔽之,观察者+反射 当调用EventBus.getInstance().register(Object)的时候,把Object注册到一个容器里 当调用EventBus.getInstance().postEvent(Event),然后找到接受对应Event的对象和方法,然后反...

2019-08-24 17:57:07 148 0

原创 【Android】【框架】【磁盘缓存】【MMKV】

优势 我们通常用的是SP框架,它的get性能是很高的,因为做了内存缓存 但是其commit、apply就不尽如人意了 apply会入队任务,Activity、Broadcast、Service的生命周期会等待队列清空,引起ANR 很多时候业务的实时性要求非常高,commit是必须采用的,但是...

2019-08-24 17:00:38 211 0

原创 【Android】【框架】【磁盘缓存】【SharedPreferences】

整体架构 初始化的时候会加载整个XML到内存中 作为内存缓存 这也是不能跨进程的原因,任何东西只要做缓存那就是2套数据了,即使SP做了多进程措施也无济于事 取:从内存取 commit:直接同步执行 apply:入队 引起ANR的原因 取是不会有ANR的,只需要在最初加载文件的时候读取...

2019-08-24 13:40:18 149 0

原创 给大学生的一些建议

昨夜和一个朋友聊了2个小时,再加上前段时间接触了很多初入大学校园的学子 看着他们朝气蓬勃的脸庞,我突然回想起了我的大学生活 许多不甘与懊悔涌上心头,好久才平复下来 所以我在此分享一二,希望未来优秀的大学生别再踩我踩过的坑了 最深的坑:务必在大学4年弄清楚自己的人生目标 我想了很久,也想不出...

2019-08-20 00:05:16 236 1

原创 【Android】【框架】【RxJava】

本文探索2个方向 发布/订阅机制的实现架构 如何实现的一行代码切换线程 此外对于操作符的使用,我建议结合其他库一起学习,比如Retrofit+RxJava使用flatMap解决嵌套请求,比如结合Room、LifeCycle,比如RxBus 发布/订阅 Observable.creat...

2019-08-18 15:14:26 178 0

原创 【Android】【框架】【Jetpack】【Architecture】【WorkManager】

接入 implementation "android.arch.work:work-firebase:1.0.0-alpha08" androidTestImplementation "android.arch.work:work-testing:1.0.0-al...

2019-08-18 00:41:50 161 0

原创 【Android】【框架】【Jetpack】【Architecture】【Room】

接入 implementation "androidx.room:room-runtime:2.1.0-alpha06" annotationProcessor "androidx.room:room-compiler:2.1.0-alpha06" ...

2019-08-17 23:59:16 118 0

原创 【Android】【框架】【Jetpack】【Architecture】【Lifecycle】

接入 // 非 androidX 项目 implementation "android.arch.lifecycle:runtime:1.1.1" annotationProcessor "android.arch.lifecycle:compiler:1.1.1...

2019-08-17 22:25:07 51 0

原创 【Android】【框架】【Jetpack】【Architecture】【DataBinding】

依赖 // module 的 build.gradle 中的 android 节点增加此代码 android { dataBinding { enabled = true } } // gradle.properties 中增加此行 android.datab...

2019-08-17 20:08:34 47 0

原创 【Android】【框架】【Jetpack】【Architecture】【ViewModel】

依赖 implementation "androidx.lifecycle:lifecycle-extensions:2.0.0" // ViewModel and LiveData 使用 public class User { public Strin...

2019-08-17 18:49:51 30 0

原创 【Android】【Framework】【ContentProvider】

学习自 《Android进阶解密》http://gityuan.com/2016/07/30/content-provider/ 进程不存在 client进程通过Binder向system_server进程发起请求 system_server检测到目标进程不存在,创建目标进程,...

2019-08-17 15:31:58 149 0

原创 【Android】【Framework】【Broadcast】

学习自 《Android进阶解密》http://gityuan.com/2016/06/04/broadcast-receiver/ 注册 静态注册由PMS来完成,图中是动态注册 通过AMS,把当前进程的ApplicationThread、InnerReceiver对象的代理类,注...

2019-08-17 14:51:15 173 0

原创 【Android】【Framework】【App启动】

学习自 《Android进阶解密》http://gityuan.com/2016/03/12/start-activity/ 架构 整体流程是点击Launcher启动目标Activity,先检查进程是否存在,不存在则向Zygote的Server Socket发起创建进程的请求,Zyg...

2019-08-17 12:33:05 215 0

原创 【Android】【Framework】【系统启动】

学习自 `《Android进阶解密》 架构 流程 1、按下电源 引导芯片代码固化在ROM,开始执行,加载BootLoader到RAM,开始执行 2、BootLoader 启动Linux 3、Linux内核 设置缓存、被保护存储器、计划列表、加载驱动 这一系列完成后,寻找init...

2019-08-15 23:11:19 150 0

原创 【Android】【系统架构】

学习自 《Android进阶解密》 架构 Framework层暴露给应用层的能力 Activity Manager:管理各个应用生命周期,以及常用的导航回退功能 Location Manager Package Manager:管理所有安装的App Notificat...

2019-08-13 23:36:16 215 0

原创 【Android】【稳定性】【ANR】【原理】【输入事件】

参考 http://gityuan.com/2019/04/06/android-anr/http://gityuan.com/2017/01/01/input-anr/ 整体架构 触摸屏幕的时候,Linux内核往设备节点写数据 EventHub会监听设备节点文件 InputRead...

2019-08-11 21:01:52 151 0

原创 【Android】【架构】【微信模块化】

学习自 https://mp.weixin.qq.com/s/6Q818XA5FaHd7jJMFBG60w 早期架构的弊端 1、进程膨胀,容易被杀,导致推送不及时 2、65535、LinearAlloc 3、功能增多,原有架构上开发难以维护 组件化重构 拆分出了简单的组件化 ...

2019-08-11 16:24:53 133 0

原创 【Android】【架构】【美团猫眼模块化】

学习自 https://mp.weixin.qq.com/s/kd3VUJkQLAcyjvkaDGKhng?tdsourcetag=s_pctim_aiomsg 背景 美团猫眼lib需要移植到团App、点评App 这里希望底层服务使用宿主App的(服务:网络库,缓存库,下拉刷新...) ...

2019-08-11 14:28:39 146 0

原创 【Android】【架构】【Atlas】

包结构 其整体包结构和正常Apk包结构类似 区别在于armeabi中存放大量的so,每个so都是APK转过来的,作为一个单独的bundle 打包流程 项目架构 可以看到架构很通俗,就和正常的组件化架构类似 底层存放功能库 业务组件的交互通过底层来实现 Atlas架...

2019-08-11 12:07:54 387 0

原创 【Android】【架构】【页面】【MVC、MVP、MVVM】

架构分类 首先明确一点,MVC、MVP、MVVM是页面架构,把一个页面,分成几个部分管理,然后这几个部分进行交互 此外还有项目架构,比如组件化;还有模块架构,负责模块内部的解耦、通信机制 MVC 其思想是,拆分数据,拆分UI,同时设计一个中介层进行交互 MVP 和MVC最大的...

2019-08-11 01:12:01 132 0

原创 【Android】【架构】【美团外卖平台化】

背景 美团外卖有多个流量入口,外卖App,美团App,微信小程序等 其中外卖作为美团App的一个频道接入,其功能和外卖App大体相似 早期由2个团队维护,如果可以由一个团队维护,人力成本就可以下降一半,这是极其重要的 所以平台化可以理解为App融合技术,一份代码,多平台运行 我所在的部门同样有2...

2019-08-10 23:09:25 417 0

原创 【Android】【Handler】

架构 最简单的一幅图即可阐述其机制: 子线程可以给队列增加元素 主线程无限循环,从队列中取元素 一旦主线程没有取到,会通过epoll多路复用机制阻塞 而子线程在给队列增加元素的时候,会通过epoll callback唤醒阻塞中的主线程 为什么要有Handler? // 点击的时候,...

2019-08-10 21:21:15 114 0

原创 【Android】【框架】【性能】【监控】【内存】【LeakCanary】

架构 原理:检测 最核心的点在于JVM的一个特性:当检测到某对象可以被GC,并且它有WeakReference,会把此对象放入WeakReference的ReferenceQueue中 这个ReferenceQueue是可以外部传入的,所以新建WeakReference的时候,给所有W...

2019-08-09 23:33:30 122 0

原创 【Android】【框架】【网络】【OkHttp】

使用 1、接入 implementation 'com.squareup.okhttp3:okhttp:3.10.0' 2、使用 // OkHttpClient初始化,全局仅需初始化一次 OkHttpClient okHttpClient = new OkHttp...

2019-08-06 00:10:38 117 0

原创 【Android】【框架】【网络】【Retrofit】

使用 1、接入 compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:retrofit-converters:2.3.0' ...

2019-08-04 21:46:59 165 0

原创 服务器搭建

最近要写推送后台,记得第一次配置Linux服务器的时候很烦,而且推送后台不是那么好写。 所以拖了很久。但是没想到找到了对的攻略,搭起来很快;推送后台也有了解决方案。 搭服务器 1.购买阿里云ECS,系统是CentOS7.3,开通端口 2.所需软件:XShell-操作Linux服务器、Wi...

2019-04-18 22:14:02 300 0

原创 数据库索引

学习自 https://blog.csdn.net/weiliangliang111/article/details/51333169   索引是怎么工作的? 比如某个表上,有这样的一列,user_name   user_name ------------ alibaba bai...

2018-07-28 17:17:24 278 0

原创 数据库之select时取别名

怎么取别名? select 列名 as 列别名,//方法1 列名 列别名,//方法2 from 表名; 这两种取别名方法是所有数据库通用的   取了别名后返回的字段是如何的? 如果你在写应用的时候,把取到的东西放在了Map中,那么你的获取方式是Map.get(列别名)。 但是你...

2018-07-28 13:00:51 6998 0

原创 类加载机制

学习自 https://www.cnblogs.com/ldq2016/p/9035649.html   ---内存区域   共享 1.堆 2.方法区:运行时常量池,Class对象   私有 1.Java方法栈 2.Native方法栈 3.PC   ---类加载机制 ...

2018-07-28 00:26:34 228 0

原创 自定义 类加载器

学习自 https://blog.csdn.net/seu_calvin/article/details/52315125   为什么需要自定义类加载器? 1.代码安全 把自己的代码加密,然后自定义类加载器的时候解密 2.支持多来源 比如类在云端,可以自定义类加载器到某个url里下载...

2018-07-28 00:17:43 328 0

原创 责任链模式

写一个项目,功能模块需要拆分 其实 责任链,他的每一个 链节,其实就是不同的功能,只不过比之于正常的写项目的 功能拆分,他的功能是有依赖性的。 比如okhttp Response getResponseWithInterceptorChain() throws IOException { ...

2018-07-27 22:39:17 289 0

原创 final关键字的一些作用

本文本不想写,为了第4点而写   1.父类不可被继承 2.父类方法不可被重写 3.final提升基础数据类型到运行时常量池里 4.方法中,final指向的东西,匿名内部类也可以进行访问   第四点重点讲一下 void test(final Object o) { new ...

2018-07-27 15:48:46 254 0

原创 进程和线程的区别

面试的时候 不能一句话概括:1.前者资源单位,后者CPU单位 需要多讲一下它们之间的区别   2.进程开销太大 进程有独立的、隔绝的地址空间,系统维护的开销很大;我们不能想要并发地执行一个功能就要开启一个新的进程,所以就有了线程;线程是共享进程的地址空间的,其创建、上下文切换的开销都很小 ...

2018-07-27 15:11:25 171 0

原创 Fragment的一些注意事项

其实本不想写此文 不符我深的特点 但是连续两个面试官都问了我Fragment的创建方式 我觉得得写一下了 顺便扩充一些其他的知识   1.Fragment的3种创建方式(连续2个面试官问过) new(有些喜欢你说newInstance的) 静态在xml中创建,本质还是和正常View一样,反...

2018-07-27 14:25:13 157 0

原创 程序计数器、指令寄存器的区别

学习自 https://blog.csdn.net/legend_x/article/details/19619327   DR 数据寄存器 IR 指令寄存器 PC 程序(指令)计数器   一条指令分为 操作+地址   在执行一条指令的时候,先把指令存内存取到DR,然后再取到IR...

2018-07-27 00:08:45 5135 2

提示
确定要删除当前文章?
取消 删除