4 徐乙

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 2k+

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

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

2019-08-27 22:12:54

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

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

2019-08-26 23:54:24

【Android】【框架】【JSON】【fastjson】

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

2019-08-25 21:26:53

【Android】【框架】【JSON】【Gson】

整体架构核心在于TypeAdapter,它定义了类型和字节之间的相互转换TypeAdapterpublic abstract class TypeAdapter<T> { public abstract void write(JsonWriter out, T value) throws IOException; public a...

2019-08-25 17:28:17

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

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

2019-08-24 19:49:04

【Android】【框架】【EventBus】

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

2019-08-24 17:57:07

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

优势我们通常用的是SP框架,它的get性能是很高的,因为做了内存缓存但是其commit、apply就不尽如人意了apply会入队任务,Activity、Broadcast、Service的生命周期会等待队列清空,引起ANR很多时候业务的实时性要求非常高,commit是必须采用的,但是SP的commit的性能是堪忧的,使用了后可以看到肉眼可见的卡顿图中可以看到MMKV和SP写性能的对...

2019-08-24 17:00:38

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

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

2019-08-24 13:40:18

给大学生的一些建议

昨夜和一个朋友聊了2个小时,再加上前段时间接触了很多初入大学校园的学子看着他们朝气蓬勃的脸庞,我突然回想起了我的大学生活许多不甘与懊悔涌上心头,好久才平复下来所以我在此分享一二,希望未来优秀的大学生别再踩我踩过的坑了最深的坑:务必在大学4年弄清楚自己的人生目标我想了很久,也想不出怎么让读者意识到这一点的重要性,只能随便说说了我为什么认为这一点是最最最重要的呢?拿我个人来说...

2019-08-20 00:05:16

【Android】【框架】【RxJava】

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

2019-08-18 15:14:26

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

接入implementation "android.arch.work:work-firebase:1.0.0-alpha08"androidTestImplementation "android.arch.work:work-testing:1.0.0-alpha08"使用// 1、定义任务public class MyWorker extends Worker {...

2019-08-18 00:41:50

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

接入implementation "androidx.room:room-runtime:2.1.0-alpha06"annotationProcessor "androidx.room:room-compiler:2.1.0-alpha06"使用// 1、定义实体,对应一张表@Entitypublic class User { @PrimaryKey ...

2019-08-17 23:59:16

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

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

2019-08-17 22:25:07

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

依赖// module 的 build.gradle 中的 android 节点增加此代码android { dataBinding { enabled = true }}// gradle.properties 中增加此行android.databinding.enableV2=true使用// 1、对于布局文件 alt + en...

2019-08-17 20:08:34

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

依赖implementation "androidx.lifecycle:lifecycle-extensions:2.0.0" // ViewModel and LiveData使用public class User { public String name;}public class UserModel extends ViewModel { p...

2019-08-17 18:49:51

【Android】【Framework】【ContentProvider】

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

2019-08-17 15:31:58

【Android】【Framework】【Broadcast】

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

2019-08-17 14:51:15

【Android】【Framework】【App启动】

学习自《Android进阶解密》http://gityuan.com/2016/03/12/start-activity/架构整体流程是点击Launcher启动目标Activity,先检查进程是否存在,不存在则向Zygote的Server Socket发起创建进程的请求,Zygote通过fork自身,创建新进程除了获取Zygote复制的虚拟机,还要创建Binder线程池和消...

2019-08-17 12:33:05

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

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

2019-08-15 23:11:19

【Android】【系统架构】

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

2019-08-13 23:36:16

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。