程序员如果也能像C罗一样自律和勤奋,必将成为大神
首先我是一个真球迷,巴萨的球迷,最爱梅西。因此我也和大部分巴萨球迷一样讨厌C罗,尤其是他笑的时候感觉有些猥琐,但是经过昨天世界杯的比赛,我对C罗的认识有了改观。
昨天凌晨西班牙对葡萄牙的比赛我是熬夜看的,30多岁还要熬夜看球为的就是要看西班牙打败葡萄牙,为了看C罗失败后的表情。第3分钟,C罗在禁区内被侵犯, 获得点球,C罗进球,真的把我气的够呛,紧接着科斯塔扳平比分。44分钟时C罗禁区外左脚射门,守门员失误让球滚进球门,我大喊换了这守门员,什么失误! 第55分钟科斯塔还以颜色2:2又扳平比分。第58分钟,纳乔于大禁区外右脚射门,球窜入对方球门左下角,原本以为西班牙就会这么赢了,料不到到第88分钟,C罗在禁区前突破造成犯规,由他来主罚任意球,C罗的眼神充满着坚定和杀气,并撸起裤腿露出了他的大腿肌肉,我就知道不妙了,果然他一个电梯球破门得分,球在距离球门2米左右突然下降,守门员一点反映都没。看到这我是真的服他了,3粒进球,3种不同的方式,整场比赛更多的是他在靠个人能力来为葡萄牙队续命,他一个人拯救了全队,这个夜晚属于C罗。
C罗已经33岁了,30岁时身体开始慢慢退化,这是自然的规律,很多 ...
Android包管理机制(一)PackageInstaller的初始化
本文首发于微信公众号「后厂技术官」
关联系列Android包管理机制系列
前言包管理机制是Android中的重要机制,是应用开发和系统开发需要掌握的知识点之一。包指的是Apk、jar和so文件等等,它们被加载到Android内存中,由一个包转变成可执行的代码,这就需要一个机制来进行包的加载、解析、管理等操作,这就是包管理机制。包管理机制由许多类一起组成,其中核心为PackageManagerService(PMS),它负责对包进行管理,如果直接讲PMS会比较难以理解,因此我们需要一个切入点,这个切入点就是常见的APK的安装。讲到APK的安装之前,先了解下PackageManager、APK文件结构和安装方式。
1.PackageManager简介与ActivityManager和AMS的关系类似,PMS也有一个对应的管理类PackageManager,用于向应用程序进程提供一些功能。PackageManager是一个抽象类,它的具体实现类为ApplicationPackageManager,ApplicationPackageManager中的方法会通过IPackageManag ...
Android插件化原理(一)Activity插件化
本文首发于微信公众号「后厂技术官」
关联系列
Android深入四大组件系列Android解析AMS系列Android解析ClassLoader系列
前言四大组件的插件化是插件化技术的核心知识点,而Activity插件化更是重中之重,Activity插件化主要有三种实现方式,分别是反射实现、接口实现和Hook技术实现。反射实现会对性能有所影响,主流的插件化框架没有采用此方式,关于接口实现可以阅读dynamic-load-apk的源码,这里不做介绍,目前Hook技术实现是主流,因此本篇文章主要介绍Hook技术实现。Hook技术实现主要有两种解决方案 ,一种是通过Hook IActivityManager来实现,另一种是Hook Instrumentation实现。在讲到这两个解决方案前,我们需要从整体上了解Activity的启动流程。
1.Activity的启动过程回顾Activity的启动过程主要分为两种,一种是根Activity的启动过程,一种是普通Activity的启动过程。关于根Activity的启动过程在在介绍过,这里来简单回顾下,如下图所示。图 1首先Launcher进 ...
我是如何写出一本畅销技术书的
如何写技术文章已经有很多人写过了,这里我来讲一下如何写一本畅销书,以及成为畅销书作者后发生的事。
1.阻碍写书的关键点很多人都想写书,也想了很久,就是事没成,最主要就是没有迈出第一步,阻碍迈出第一步的原因主要有三点,分别是担忧、动机和积累。写书前一般会有以下担忧:
卖不出去
被差评
半途而废
时间投入过多,回报太少
其实这些都是多余的担忧,因为你不去写不去做,不会知道上述这些问题会不会出现,就算出现了又能怎样呢?你是见阎王了,还是少腿了?正是这些担忧成为了负担,造成了不必要的内耗。还有一个就是动机不足,好好想想你为何要写一本畅销书,从内心深处挖掘出这个动机并加强它。这里我要说一句:想做的事就要争取尽早做,因为有些事错过了就是一辈子。最后一点是积累,如果肚子里没墨水,半天蹦不出一个字,那就很无奈了,做好积累再说吧。
2.写书前准备2.1 积累写书不是一蹴而就的事,很多作者都是写了多年的文章,有了很多积累才开始写书的,这个积累包括文笔、思路、整合能力、知识点等等。因此,如果你打算写书,最好从现在开始写文章做积累。如果没有积累就贸然写书,在写作过程中会非常痛苦,并且书出版后也很难成为畅 ...
Android热修复原理(一)热修复框架对比和代码修复
本文首发于微信公众号「后厂技术官」
关联系列解析ClassLoader系列
前言在Android应用开发中,热修复技术被越来越多的开发者所使用,也出现了很多热修复框架,比如:AndFix、Tinker、Dexposed和Nuwa等等。如果只是会这些热修复框架的使用那意义并不大,我们还需要了解它们的原理,这样不管热修复框架如何变化,只要基本原理不变,我们就可以很快的掌握它们。这一个系列不会对某些热修复框架源码进行解析,而是讲解热修复框架的通用原理。
1.热修复的产生概述在开发中我们会遇到如下的情况:
刚发布的版本出现了严重的bug,这就需要去解决bug、测试并打渠道包在各个应用市场上重新发布,这会耗费大量的人力物力,代价会比较大。
已经改正了此前发布版本的bug,如果下一个版本是一个大版本,那么两个版本的间隔时间会很长,这样要等到下个大版本发布再修复bug,这样此前版本的bug会长期的影响用户。
版本升级率不高,并且需要很长时间来完成版本覆盖,此前版本的bug就会一直影响不升级版本的用户。
有一个小而重要的功能,需要短时间内完成版本覆盖,比如节日活动。
为了解决上面的问题,热修 ...
瞬息万变的技术圈与焦虑的技术人
过了30岁后的人很多都会感受到一个问题:从大学毕业到迈入30岁其实只是一瞬,感觉没做什么,还没潇洒完,还没耍帅够就听着身边的人开始叫你大叔、大哥了。而30岁后更恐怖,你感觉时间越过越快,职业危机的死神早已悄悄的站在你身后了。
黄金时期与技术热点对于技术人,从大学毕业到30岁是一个黄金时期,这个时期需要积蓄足够的力量,在30岁左右爆发,否则35岁多数人会走下坡路,不排除有大器晚成的,但是大器晚成的前提也是在早年做了充分的准备。正是由于技术人的黄金时间有限,因此大家都希望抓住技术趋势,赶上风口。近10年技术圈的瞬息万变结合技术人的黄金时期有限,技术人也变得越来越浮躁,越来越焦虑。首先列出最近几年技术圈的热点技术(这里只是做出举例,时间点未必完全准确):2010年2011年:Android和iOS在中国发芽生根,很多Java开发和塞班开发投入了Android和iOS的怀抱。2012年2013年:Html5定稿,挑战Android和iOS。2014年2015年:Android和iOS大火,势不可挡,培训机构倾巢出动。2015年2016年:前端火爆,Android和iOS逐渐开始饱和,大数据开 ...
Android解析WindowManagerService(三)Window的删除过程
本文首发于微信公众号「后厂技术官」
关联系列Android系统启动系列Android深入四大组件系列Android应用进程启动过程系列Android解析WindowManager系列
前言在本系列文章中,我提到过:Window的操作分为两大部分,一部分是WindowManager处理部分,另一部分是WMS处理部分,Window的删除过程也不例外,本篇文章会介绍Window的删除过程,包括了两大处理部分的内容。
Window的删除过程和Android解析WindowManagerService(二)WMS的重要成员和Window的添加过程这篇文章中Window的创建和更新过程类似,要删除Window需要先调用WindowManagerImpl的removeView方法,removeView方法中又会调用WindowManagerGlobal的removeView方法,我们就从这里开始讲起。为了表述的更易于理解,本文将要删除的Window(View)简称为V。WindowManagerGlobal的removeView方法如下所示。
frameworks/base/core/java ...
Android深入四大组件(七)Android8.0 根Activity启动过程(后篇)
本文首发于微信公众号「后厂技术官」
相关文章Android深入四大组件系列Android系统启动系列Android应用程序进程系列Android深入解析AMS系列
前言在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读Android 8.0源码时发现应用程序(根Activity)启动过程照Android 7.0有了一些变化,因此又写下了本篇文章,本篇文章照此前的文章不仅流程发生变化,而且增加了一些分析,算是升级版本。由于篇幅较长,Android8.0 根Activity启动过程仍旧分为前篇和后篇来进行讲解。
1. ActivityThread启动Activity的过程通过前篇的介绍,我们知道目前的代码逻辑运行在应用程序进程中。先来查看ActivityThread启动Activity的过程的时序图。
我们接着来查看ApplicationThread的scheduleLaunchActivity方法,其中ApplicationThread是Ac ...
Android深入四大组件(六)Android8.0 根Activity启动过程(前篇)
本文首发于微信公众号「后厂技术官」
相关文章Android深入四大组件系列Android系统启动系列Android应用程序进程系列Android深入解析AMS系列
前言在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读Android 8.0源码时发现应用程序(根Activity)启动过程照Android 7.0有了一些变化,因此又写下了本篇文章,本篇文章照此前的文章不仅流程发生变化,而且增加了一些分析,算是升级版本。由于篇幅较长,Android8.0 根Activity启动过程仍旧分为前篇和后篇来进行讲解。
1.概述Activity的启动过程分为两种,一种是根Activity的启动过程,另一种是普通Activity的启动过程,根Activity指的是应用程序启动的第一个Activity,因此根Activity的启动过程一般情况下也可以理解为应用程序的启动过程。普通Activity指的是除了应用程序启动的第一个Activity之外的其他的Ac ...
Android解析WindowManagerService(二)WMS的重要成员和Window的添加过程
本文首发于微信公众号「后厂技术官」
关联系列Android系统启动系列Android深入四大组件系列Android应用进程启动过程系列Android解析WindowManager系列
前言在本系列的上一篇文章中,我们学习了WMS的诞生,WMS被创建后,它的重要的成员有哪些?Window添加过程的WMS部分做了什么呢?这篇文章会给你解答。
1.WMS的重要成员所谓WMS的重要成员是指WMS中的重要的成员变量,如下所示。frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
final WindowManagerPolicy mPolicy;final IActivityManager mActivityManager;final ActivityManagerInternal mAmInternal;final AppOpsManager mAppOps;final DisplaySettings mDisplaySettings;...final ArraySet< ...
Android解析ClassLoader(二)Android中的ClassLoader
本文首发于微信公众号「后厂技术官」
关联系列Java虚拟机系列Android系统启动系列Android解析ClassLoader系列
前言在上一篇文章我们学习了Java的ClassLoader,很多同学会把Java和Android的ClassLoader搞混,甚至会认为Android中的ClassLoader和Java中的ClassLoader是一样的,这显然是不对的。这一篇文章我们就来学习Android中的ClassLoader,来看看它和Java中的ClassLoader有何不同。
1.ClassLoader的类型我们知道Java中的ClassLoader可以加载jar文件和Class文件(本质是加载Class文件),这一点在Android中并不适用,因为无论是DVM还是ART它们加载的不再是Class文件,而是dex文件,这就需要重新设计ClassLoader相关类,我们先来学习ClassLoader的类型。Android中的ClassLoader类型和Java中的ClassLoader类型类似,也分为两种类型,分别是系统ClassLoader和自定义ClassLoader ...
Android解析WindowManagerService(一)WMS的诞生
本文首发于微信公众号「后厂技术官」
关联系列Android系统启动系列Android深入四大组件系列Android应用进程启动过程系列Android解析WindowManager系列
前言此前我用多篇文章介绍了WindowManager,这个系列我们来介绍WindowManager的管理者WMS,首先我们先来学习WMS是如何产生的。本文源码基于Android 8.0,与Android 7.1.2相比有一个比较直观的变化就是Java FrameWork采用了Lambda表达式。
1.WMS概述WMS是系统的其他服务,无论对于应用开发还是Framework开发都是重点的知识,它的职责有很多,主要有以下几点:
窗口管理WMS是窗口的管理者,它负责窗口的启动、添加和删除,另外窗口的大小和层级也是由WMS进行管理的。窗口管理的核心成员有DisplayContent、WindowToken和WindowState。
窗口动画窗口间进行切换时,使用窗口动画可以显得更炫一些,窗口动画由WMS的动画子系统来负责,动画子系统的管理者为WindowAnimator。
输入系统的中转站通过对窗口的触 ...
Android解析ClassLoader(一)Java中的ClassLoader
本文首发于微信公众号「后厂技术官」
关联系列Java虚拟机系列Android解析ClassLoader系列
前言热修复和插件化是目前比较热门的技术,要想更好的掌握它们需要了解ClassLoader,因此也就有了本系列的产生,这一篇我们先来学习Java中的ClassLoader。
1.ClassLoader的类型在Java虚拟机(一)结构原理与运行时数据区域这篇文章中,我提到过类加载子系统,它的主要作用就是通过多种类加载器(ClassLoader)来查找和加载Class文件到 Java 虚拟机中。Java中的类加载器主要有两种类型,系统类加载和自定义类加载器。其中系统类加载器包括3种,分别是Bootstrap ClassLoader、 Extensions ClassLoader和 App ClassLoader。
1.1 Bootstrap ClassLoader用C/C++代码实现的加载器,用于加载Java虚拟机运行时所需要的系统类,如java.lang.*、java.uti.*等这些系统类,它们默认在$JAVA_HOME/jre/lib目录中,也可以通过启动Java虚拟机时指 ...
Android解析WindowManager(三)Window的添加过程
本文首发于微信公众号「后厂技术官」
关联系列Android系统启动系列Android深入四大组件系列Android应用进程启动过程系列Android解析WindowManager系列
前言在此前的系列文章中我们学习了WindowManager体系和Window的属性,这一篇我们接着来讲Window的添加过程。建议阅读此篇文章前先阅读本系列的前两篇文章。
1.概述WindowManager对Window进行管理,说到管理那就离不开对Window的添加、更新和删除的操作,在这里我们把它们统称为Window的操作。对于Window的操作,最终都是交由WMS来进行处理。窗口的操作分为两大部分,一部分是WindowManager处理部分,另一部分是WMS处理部分。我们知道Window分为三大类,分别是:Application Window(应用程序窗口)、Sub Windwow(子窗口)和System Window(系统窗口),对于不同类型的窗口添加过程会有所不同,但是对于WMS处理部分,添加的过程基本上是一样的, WMS对于这三大类的窗口基本是“一视同仁”的。
本篇主要会讲解Windo ...
Android解析WindowManager(二)Window的属性
本文首发于微信公众号「后厂技术官」
关联系列Android系统启动系列Android深入四大组件系列Android解析WindowManager系列
前言在上一篇文章我们学习了WindowManager体系,了解了Window和WindowManager之间的关系,这一篇我们接着来学习Window的属性。
1.概述上一篇文章中我们讲过了Window、WindowManager和WMS之间的关系,WMS是Window的最终管理者,Window好比是员工,WMS是老板,为了方便老板管理员工则需要定义一些“协议”,这些“协议”就是Window的属性,被定义在WindowManager的内部类LayoutParams中,了解Window的属性能够更好的理解WMS的内部原理。Window的属性有很多种,与应用开发最密切的有三种,它们分别是Type(Window的类型)、Flag(Window的标志)和SoftInputMode(软键盘相关模式),下面分别介绍这三种Window的属性。
2.Window的类型和显示次序Window的类型有很多种,比如应用程序窗口、系统错误窗口、输入法窗口、 ...
Android解析WindowManager(一)WindowManager体系
本文首发于微信公众号「后厂技术官」
关联系列Android系统启动系列Android深入四大组件
前言WindowManagerService(WMS)和AMS一样,都是Android开发需要掌握的知识点,同样的,WMS也很复杂,需要多篇文章来进行讲解,为何更好的理解WMS,首先要了解WindowManager,这一篇我们来学习WindowManager体系。
1.Window、WindowManager和WMSWindow我们应该很熟悉,它是一个抽象类,具体的实现类为PhoneWindow,它对View进行管理。 WindowManager是一个接口类,继承自接口ViewManager,从名称就知道它是用来管理Window的,它的实现类为WindowManagerImpl。如果我们想要对Window进行添加和删除就可以使用WindowManager,具体的工作都是由WMS来处理的,WindowManager和WMS通过Binder来进行跨进程通信,WMS作为系统服务有很多API是不会暴露给WindowManager的,这一点与ActivityManager和AMS的关系有些类似 ...