自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 从0搭建Jetpack版的WanAndroid客户端

1、项目目的: 在接触Android Jetpack组件时, 就深深被其巧妙的设计和强大的功能所吸引,暗自告诉自己一定要学会这些组件,而网上并不能找到系统的学习资料,于是利用每天的时间访问Google Developers,把Jetpack的每个组件从使用到源码进行了系统的学习和总结,于是就有了带你领略Android Jetpack组件的魅力系列文章,希望在总结自己学习的同时,也能帮助需要这些...

2018-11-18 21:42:29 8126

原创 带你领略Android Jetpack组件的魅力

1、前言最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件: 带你领略Android Je...

2018-10-23 14:20:57 30218 13

原创 Android Jetpack架构组件之 Paging(使用、源码篇)

1、前言最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件:带你领略Android Je...

2018-10-22 18:15:04 7845 4

原创 Android Jetpack架构组件之WorkManger

1、前言最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件: 带你领略Android Je...

2018-10-21 21:57:29 4647 1

原创 Android Jetpack架构组件之Navigation

1、前言最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件:带你领略Android Jet...

2018-10-21 20:16:49 6539 3

原创 Android Jetpack架构组件之 Room(使用、源码篇)

1、前言最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件:带你领略Android Jet...

2018-10-20 23:32:57 7916 1

原创 Android Jetpack架构组件之 LiveData(使用、源码篇)

1、前言最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件:带你领略Android Je...

2018-10-10 15:44:47 7219

原创 Android Jetpack架构组件之 Lifecycle(源码篇)

一、前言最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件: 带你领略Android Je...

2018-09-11 14:17:03 5637

原创 Android Jetpack架构组件之 ViewModel (源码篇)

1、前言最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件:带你领略Android Jet...

2018-09-06 15:46:30 6961

原创 Android Jetpack架构组件之 Lifecycles(使用篇)

一、概述最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面。Android Architecture组件是Android Jetpack的一部分,它们是一组库,旨在帮助开发者设计健壮、可测试和可维护的应用程序,包含一下组件:带你领略Android Jet...

2018-06-10 11:00:53 15322 18

原创 深入AMS源码(四)——ActivityManagerService的进程管理

1、Android与Linux协作内存管理Android的内存管理实际是通过与Linux协作完成的,Linux通过OOM KIller机制通知Android端执行内存释放操作2.1、OOM Killer回收机制在Android中运行一个叫OOM进程,该进程启动后首先会向Linux内核中注册成为OOM Killer当内核内存管理模块检测到内存低时会通知OOM进程,然后OOM Killer执...

2019-11-01 15:02:25 1200

原创 深入AMS源码(二)—— ActivityManagerService对Activity的调度管理

1、概述在上一篇深入AMS源码(一)——ActivityManagerService的基础知识文章介绍了AMS的基础信息,主要包括AMS中主要的数据结构、主要功能类和属性以及AMS中对生命周期的调度方式,本篇主要从源码的角度分析下AMS对Activity的调度逻辑,这也是AMS的主要功能;AMS.startActivity()关于Activity的启动过程查Android进阶知识树——An...

2019-10-31 18:27:03 732

原创 深入AMS源码(三)——ActivityManagerService的内存管理

1、简介AMS对内存管理当应用程序关闭后,后台对应的进程并没有真正的退出进程只是处于sleep状态,以便下次启动能快速启动,即关闭而不退出;当系统内存不足时,AMS会回调相应的应用程序通知释放内存;当系统内存不足时,AMS主动根据一定的优先规则退出优先级较低的进程;程序关闭而不退出程序在退出之后不会关闭进程,当应用二次启动时如果进程还在则直接使用,此处可能存在的疑问就是进程...

2019-10-31 13:11:32 1168

原创 深入AMS源码(一)——ActivityManagerService的基础知识

自从读过Android内核剖析这本书之后,对整个安卓的系统有了更深的认识和理解,前面写了3篇文章(深入PMS源码)分析了PMS的相关代码,之后会将相关知识都整理在博客上,本篇开始将从源码角度分析AMS的执行逻辑,AMS作为Android的核心服务,了解其内部流程会让开发者对程序的执行有更深刻的认识,主要的流程逻辑放在下一篇中分析,这里先分析下基础部分便于更好的理解之后的内容;1、AMS重要数据结...

2019-10-30 16:13:44 901

原创 深入PMS源码(三)—— PMS中intent-filter的匹配架构

PMS在初始化的时候,会从所用应用的注册清单文件中读取intent-filter值,并建立保存信息的数据结构;在使用PackageManager的query()方法分别查询匹配不同的Component信息IntentResolver属性和方法介绍 private final HashSet<F> mFilters = new HashSet<F>(...

2019-10-30 12:03:26 883 1

原创 深入PMS源码(二)—— APK的安装和卸载源码分析

1、应用程序安装基础单个APK程序安装的过程把原始的APk文件复制到程序相应的目录文件下,对于第三方app复制到/data/app/目录下为程序创建相应的数据目录、提取dex文件、修改系统包管理信息程序安装过程在程序目录下创建以包名称命名的程序apk文件File在data/data/目录下创建应用程序的数据文件将程序所有的信息写入到配置文件package.xml文件中...

2019-10-29 18:06:14 2154

原创 深入PMS源码(一)—— PMS的启动过程和执行流程

1、PMS简介作为Android开发者,或多或少的都接触过Android的framework层架构,这也是开发者从使用Android到了解安卓的过程,framework层的核心功能有AMS、PMS、WMS等,这三个也是系统中最基础的使用,笔者之前分析过Android进阶知识树——Android系统的启动过程 和 Android进阶知识树——应用进程的启动过程,在Android程序启动完成后回启动...

2019-10-28 16:39:16 5582 3

原创 Android进阶知识树——应用安全基础篇

1、Smile语法入门Smali是Java虚拟机中的一种.dex格式文件汇编器,它采用一种宽松式的Jasmin/dedexer的语法,表达了.dex格式所有功能和信息原始类型映射关系v :void ()Z:booleanB:byteS:shortC:charI:intJ:longF:floatD:double类的表示:Ljava/lang/String;L:...

2019-09-10 11:37:54 487

原创 Android进阶知识树——23种设计模式详解

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式创建模式:1、 定义2、角色3、优点4、使用场景5、使用实例...

2019-09-10 11:16:04 656

原创 Android进阶知识树——应用进程的启动过程

1

2019-09-03 11:03:49 547

原创 Android进阶知识树——Android系统的启动过程

1

2019-09-02 15:14:47 559

原创 Android进阶知识树——理解系统服务WindowManagerService

属性介绍创建过程添加过程删除过程

2019-08-31 15:52:01 557

原创 Android进阶知识树——必须会的组件化技术

1、概述笔者从事智能家具行业的开发工作,也是从公司创业团队工作到现在,对于公司的项目从1.0版本开始接手一直到现在,虽说项目不是很大但麻雀虽小五脏俱全,在项目和团队的不断扩大、暴露出的问题也不段增多,组件化势在必行,本文就根据整个项目的发展,总结下组件化的实践流程;在最初的1.0版本中只是针对一个智能设备的操控和数据交互,项目本身就很简单此时也基本单人开发,所以所有的功能代码都直接在app中...

2019-08-27 17:18:58 448

原创 Android插件化——深入理解Context机制

1、

2019-08-18 16:53:30 687

原创 Android进阶知识树——JNI和So库开发

1、Jni基础知识Jni使用场景需要调用Java语言不支持的依赖时,整合非Java语言开发的系统,如C、C++节省运行时间提高运行效率,如:音视频等Jni类型和Java类型的映射关系native方法与Jni映射实例public static native String action(short s , int i, long l, float f, double d,...

2019-08-18 14:39:11 840

原创 Androdi热修复之路 ——热修复框架Tinker 源码分析

1、Application的生成2、下载补丁合成Patch包在程序中开启加载补丁包TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch.patch");通过网络...

2019-08-14 18:20:37 361

原创 Android进阶知识树——Android四大组件启动过程

ActivityActivity的启动是从Activity的startActivityForResult(),在startActivityForResult()中调用Instrumentation.execStartActivity()execStartActivity():调用IActivityManager代理类执行Activity的启动,IActivityManager在此处采用B...

2019-08-13 19:02:17 787 1

原创 Android插件化——VirtualAPK接入与源码分析

1、宿主工程引入VirtualApk在项目Project的build.gradle中添加依赖dependencies {classpath ‘com.didi.virtualapk:gradle:0.9.8.6’}在宿主app的build.gradle中引入VirtualApk的host插件apply plugin: ‘com.didi.virtualapk.host’在app中添...

2019-08-12 18:35:27 853

原创 Android插件化——高手必备的Hook技术

1、Hook技术之动态代理Hook技术的基础和必备技术是动态代理,关于动态代理的使用和原理参见Java动态代理2、Binder Hook(Hook 系统服务)2.1、系统获取服务的原理ContextImpl.getSystemService(String name) @Overridepublic Object getSystemService(String name) { ...

2019-08-11 17:27:32 1368

原创 Android框架源码分析——OKhttp缓存篇

CacheInterceptor:负责缓存管理@Override public Response intercept(Chain chain) throws IOException {Response cacheCandidate = cache != null? cache.get(chain.request()) //(1)获取请求地址对应的缓存数据: null;long now...

2019-07-07 17:46:39 476 2

原创 Android框架源码分析——Okhttp源码分析

1、OkhttpClient创建OkhttpClientOkHttpClient okHttpClient = new OkHttpClient.Builder().build();源码public Builder() {dispatcher = new Dispatcher(); //创建任务调度器protocols = DEFAULT_PROTOCOLS; //默认支持的Http...

2019-07-07 17:00:43 226

原创 Android框架源码分析——RxJava&Schedule源码分析

3、线程切换使用实例Observable.create(object:ObservableOnSubscribe<String>{ override fun subscribe(e: ObservableEmitter<String>) { e.onNext("A") }}) .subscribeOn(Schedulers.io(...

2019-07-01 22:22:55 490

原创 Android框架源码分析——Retrofit源码分析

1、使用Demopublic static <T> T createApi(Class<T> clazz, String url) { Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .client(okHttpClient) ...

2019-07-01 21:56:25 303

原创 Android框架源码分析——RxJava源码分析

1、基本订阅流程使用实例Observable.create(ObservableOnSubscribe<String> { e -> e.onNext("A") }) .subscribe(object : Observer<String>{ override fun onComplete() { } override fun ...

2019-06-29 22:35:03 413

原创 Android框架源码分析——Glide缓存机制源码分析

1、Glide的缓存Glide 在加载图片时会依次访问以下缓存:活动资源 (Active Resources) - 现在是否有另一个 View 正在展示这张图片?内存缓存 (Memory cache) - 该图片是否最近被加载过并仍存在于内存中?资源类型(Resource) - 该图片是否之前曾被解码、转换并写入过磁盘缓存?数据来源 (Data) - 构建这个图片的资源是否之前曾被...

2019-06-29 12:46:08 521

原创 Android框架源码分析——Glide源码分析

1、Glide的使用 Glide.with(this).load(url).into(imageView)在当下Glide已经是很常见的图片加载工具了,相信很多开发者都体会到其方便指出,Glide的使用就简单一句话即可完成图片的加载,但不要小看这句话,Glide的背后可是作出了成吨的工作,今天整理一下Glide的相关笔记,跟随上面的一句代码探索Glide的奇妙指出;2、with()...

2019-06-27 23:07:47 499

原创 Androdi热修复之路 —— 理解Multidex 分包原理

1、使用使用配置在build.gradle中添加支持MultidexdefaultConfig{ multiDexEnabled true }添加Multidex依赖implementation 'com.android.support:multidex:1.0.3'在Application中初始化MultidexMultiDex.install(this...

2019-06-03 18:02:42 899

原创 Android热修复之路——ClassLoader详解

1、ClassLoader简介在应用程序打包成APK时,程序中所创建的类、导入和引用的类都会被编译打包成一个或多个的dex文件中,打包成的dex文件在使用中如何加载类?答案就在ClassLoader中,ClassLoader从字面就可以知道它主要用于类的加载,当代码中需要调用某个类时,ClassLoader就会遍历所有的dex文件中的类并保存在集合中,然后从集合中加载指定的Class。2、Cl...

2019-05-22 22:49:03 768

原创 Android框架源码分析——EventBus

1、介绍篇EventBus三要素Event 事件:可以是任意类型,既然为事件一定伴随着传递和操作,在使用中扮演信息和事件载体Subscriber 事件订阅者:这里的订阅着和RxJava中作用一样负责监听某种状态,在状态和条件改变时回调处理,在EventBus3.0之前所有的订阅方法必须是onEvent开头,分别是onEvent、onEventMainThread、onEventBack...

2019-04-26 16:28:11 285

原创 安卓自定义View——Matrix

1、Matrix简介Matrix是一个矩阵,主要功能映射视图中的坐标,这里的映射有两重意思,一是将坐标以矩阵的形式表示,类似于数学中的向量,二是映射手机屏幕坐标和安卓坐标的对应关系,在物理屏幕中坐标原点为左上角(0,0)处,而在Android了开发中使用的坐标是去除状态栏和导航栏的高度,即(0,0)位置在状态栏之下,假设状态栏30px,导航栏60px,则Android中的(0,0)对应物理坐标...

2019-04-24 10:40:59 1280

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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