自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 三年开发经验,抖音离职后,拿到Airbnb、快手、小红书、猿辅导等多家公司的offer

前言 我这篇文章并不是简单的描述一些面试中的题,或者总结一些Android的知识,而是想记录我整个的想法和准备的过程,以及一些心得体会,让大家更加全面的去看待工作、跳槽和生活(从我的角度,当然肯定有不合理的地方,大家借鉴就好) 在字节跳动的两年时间中见证了抖音从百万日活到2.5亿、团队从10人到1...

2020-05-07 11:03:55 42323 339

原创 一年Android工作经验,今日头条 阿里 百度 网易 美团 小米 快手面经

前言 人生困难重重,在漫长而艰辛的前行路上,坚持不懈、脚踏实地的“低头拉车”固然重要。但认清形势、找准目标的“抬头看路”也很关键,甚至决定着你能否达到成功彼岸。只寻求远方的梦想,而不付出当下的努力,那是迷梦;只知道埋头苦干,而不认清方向,那是徒劳。 先简单说说我最近的面试经历吧。面试的公司很多...

2017-06-22 20:11:53 21627 61

原创 程序员的蜕变之旅-健身
原力计划

前言 标题起的有点SAO,哈哈。其实就是健身,我自从毕业后一直在保持着锻炼这个习惯,也曾一直梦想能锻炼出8块腹肌,成为大肌霸,奈何现实太残酷,断断续续锻炼坚持了3年后,只能说身形不胖,有那么一丁点肌肉线条,但是离肌肉男还查的很远,再加上我的工作性质需要经常加班,所以没有很多的时间让我保持一个高强度...

2020-04-30 11:25:28 271 1

原创 Lottie 浅析

Lottie 简介 Lottie是是一个可以解析Adobe After Effects使用BodyMovin插件导出的动画json文件,并且渲染到手机和网页上的库,Lottie支持Android,iOS,Web和Windows。 Lottie Android 如何使用 Lottie在Android...

2019-11-29 18:56:39 199 0

原创 北京三日自驾游-和狗狗的秦皇岛之旅

前序 生活不止眼前的苟且,还有诗和远方 努力工作是为了更好的体验生活,需要偶尔停下脚步看看路旁的风景,所以我们趁着中秋放假,体验了一把秦皇岛3日自驾游,由于带上了狗,所以所有的去玩的地方和住宿的地方都需要提前了解清楚,虽然少了很多选择,但是又多了很多意外的惊喜,我就把这次旅游的体验记录下来,成为美...

2019-10-31 14:29:31 192 0

翻译 Gradle Task Configuration Avoidance

这个章节介绍了处理任务时"避免配置",并且解释了迁移构建以有效实用配置避免api的一些指导原则,这里描述的API与现有的API共存,但是现有的API将在以后的几个重要版本中被代替。在Gradle 5.1中,我们建议使用配置避免的API来创建自定义的Plugins。 配置避免AP...

2019-09-29 19:46:43 172 0

原创 优雅的减小包体积-优化图片

前言 老话常谈,我们每次引入新的优化手段,都需要详细调研,明确优缺点,以及引入这项技术或者功能,能给现有的项目带来什么收益以及带来哪些不便。 首先我们要搞明白为什么要优化包体积?普遍认为的减少包体积有以下几个好处: 下载转换率,体积越小下载率越高 如果需要和厂商合作进行预装,由于预装空间是有限的...

2019-08-30 19:26:45 387 0

原创 Paging Library-初探分页库

简介 在2018年5月9日的谷歌开发者大会(Google I/O 2018) 中提出在去年发布的广受欢迎的架构组件上,进一步改进并推出了Jetpack。Jetpack能帮助我们更专注提升应用体验,加快应用开发速度,处理类似后台任务、UI 导航以及生命周期管理等。 发布的新版 Android Jet...

2019-07-26 19:42:56 287 1

原创 Gradle-初探代码注入Transform

简介 本文主要介绍gradle打包过程中transform阶段,这里大概说下AOP(Aspect Oriented Programming),这是一种面向切面的思想,预支对应的是OOP(Object Oriented Programming)面向对象编程,这里不展开说明。可以看下对AOP总结的思维...

2019-05-29 09:33:50 1990 2

原创 浅析Android插件化

前言 在Android 9.0的jar包中,可以发现很多函数添加了@hide,这表示google显示了对@hide api的反射调用,上有政策,下有对策,我天朝人民的智慧是无穷尽的,具体的方案可以参考一种绕过Android P对非SDK接口限制的简单方法。按理说只要在Android 9.0的手机反...

2019-04-28 21:42:14 1011 0

原创 基于ASM的组件化框架

背景 我们在开发一个应用时,会随着时间、人员和需求的增多,我们的代码也会以一个非常快的速度在迭代,同时由于每个人的开发水平不一样,就会有各种各样的问题,如果一直在一个project中开发,很快演变成一个高耦合、臃肿和复杂的项目,所以我们就需要对项目进行优化,我们经常听的有模块化、组件化和插件化,这...

2019-03-25 14:06:07 584 0

原创 apk打包流程

aapt资源编译 编译assets目录和res/raw目录下的资源 编译res目录下的资源文件 给res目录下的每个资源赋予一个资源ID,生成resource.arsc资源索引文件 解析并编译AndroidMainifest.xml 资源打包成*.ap_,资源ID常量定义自R.java 资源索...

2019-02-25 13:44:13 580 0

原创 字节跳动屏幕适配方案解读

说来惭愧,这个方案在微信公众号推出来的时候,我才去了解我司自己的适配方案。字节跳动屏幕适配方案 重点 为什么要做屏幕适配 从数据上告诉你安卓手机屏幕的碎片化 我司的适配方案 适配中出现的问题 实际演练 为什么要做屏幕适配 在Android开发中,由于Android的碎片化严重,屏幕分辨率千奇...

2019-01-19 12:57:25 1285 1

原创 手摸手带你走进Kotlin Coroutine

参考文章 kotlin官网 kotlin github Roman Elizarov 视频(基于1.3之前的,一些用法已经改变,但是主要看原理和思想) Roman Elizarov 视频深入(基于1.3之前的,一些用法已经改变,但是主要看原理和思想) Roman Elizarov 基于1.3讲解 ...

2018-12-24 11:33:37 1400 0

原创 轻量级的MVVM

背景 现在的项目中各种开发框架都有,MVC,MVP,MVVM。比较混乱,虽然也推出了MVVM,但是由于没有强制和代码历史的问题,大部分的时候还是使用之前的开发框架进行开发,所以现在整个项目的结构比较复杂和混乱。 先设立一个小目标,先在咱们组内,统一开发框架,实践出真知,在实践中检测这个框架的易用性...

2018-11-25 17:11:01 625 0

原创 Gradle-自定义plugin

为什么要学习Gradle Gradle目前已经应用于多个Android开发的技术体系中,比如构建系统、插件化、热修复和组件化,如果不了解Gradle,那么对于上述技术体系的了解会大打折扣 上述一段文字是比较传统的解释,我开始系统的学习gradle是因为,项目由于引入了组件化的开发模式,模块之间...

2018-10-28 13:57:14 383 0

原创 优雅的使用Kotlin

优雅的使用Kotlin 这篇文章并不会从零开始来教你怎么使用Kotlin,Kotlin对于笔者来说也是一个新概念,由于大势所趋(Google所有的官方Demo都开始用Kotlin,各大第三方Library也开始适配Kotlin),所以不会Koltin寸步难行呀~,经过一段时间的学习和练习,对Kot...

2018-09-26 11:31:13 1382 0

原创 优雅的监听软键盘隐藏

背景 Android软键盘的显示和隐藏,从开始做直播这块,就一直困扰着我。 从布局挤压,到输入区显示不全,再到闪屏以及卡顿,这里的坑让我跌倒无数次。 各种布局监听,回调,代码冗余、复杂、与业务强耦合无法复用,还是没有很好的解决键盘的弹出和隐藏 为了给用户更好的操作体验,决定找到一种最优解决方案...

2018-08-11 16:43:28 3537 4

原创 Retrofit2源码阅读

本次分析的要点: 1. Retrofit中的动态代理和整个流程(Proxy、ServiceMethod、OkHttpCall) 2. Retrofit中的转换器和适配器(Converter、CallAdapter) Retrofit整体流程和动态代理 首先我们回顾一下retrofit的...

2018-07-31 10:59:56 582 0

原创 OkHttp3源码分析

重点 本文打算从三点来剖析OkHttp3: * 网络请求的整理流程-会使用 * 拦截器模式-易扩展 * 缓存和连接池-高性能 整体流程 我们在阅读某一类源码之前,首先要学会怎么使用,其次才是去了解内部的实现原理,实现方案上有什么技巧。 okhttp的一张流程图: 官方用...

2018-06-28 14:40:10 1989 0

原创 绘制性能优化-ConstraintLayout

ConstraintLayout是2016年Google发布的,这种新的布局方式支持了编辑器的方式,从布局和性能上都做了一定的优化,同时也增加了一些新的概念,例如约束链和设置大小比例。本文从将会从性能上与传统的布局进行比较,并且给出使用在项目上的建议。 Android的绘制流程 首先回顾一...

2018-05-31 20:48:26 1218 0

原创 Android 投影MAC,Vysor pro 破解

投影工具 当我们需要做产品演示,或者需要在手机上做一些讲解时,需要让大家看到手机屏幕,这个时候就需要一款好的投影工具。 现在比较好用的是: Vysor是一款可以使用电脑操作安卓手机的谷歌浏览器插件,非常流程和方便,但是免费版的话,画面质量非常差,后面会介绍怎么破解。 AirDroid 是一...

2018-04-24 16:49:39 3658 0

原创 Gradle学习笔记

gradle学习笔记(一) 概念 Gradle本身是基于Groovy脚本语言进行构建的,并通过Domain Specific Language(DSL语言)进行描述和控制构建逻辑的。 参考的文档: 官方文档 中文翻译文档 Gradle用户指南 Android Studio构建指南 A...

2018-03-30 19:19:08 350 0

原创 AOP在Android中最佳用法

AOP AOP(Aspect Oriented Programming)是面向切面编程,AOP和我们平时接触的OOP编程是不同的编程思想,OOP是面向对象编程,提倡的是将功能模块化,对象化。而AOP的思想则是提倡针对同一类问题统一处理,当然,我们在实际编程过程中,不可能单纯的AOP或者OOP的思...

2018-02-28 16:58:51 4502 0

原创 基于Kotlin实现注解生成器(Annotation Processor)

随着一些使用注解生成器(annotationProcessor)的框架的流行,例如ButterKnife、dagger2、EventBus 3.0。我需要了解注解生成器的相关知识。 APT APT(Annotation Processing Tool)是一种处理注解的工具,它对源代码文件进...

2018-01-30 14:38:04 2795 5

原创 解决 android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcesso

在使用EventBus 3.0的时候,在Android Studio 执行Sync Project的时候出现了这个错误 android-apt plugin is incompatible with the Android Gradle plugin. Please use 'ann...

2018-01-29 15:40:25 4320 0

原创 Gradle发布Library到JCenter

之前工作的时候,认为只用关注代码本身就可以,将代码写好,其他的都不需要关心,但是这个认识的狭隘的,任何可以提升我们开发效率的工具或者语言我们都应该适当的去关注一下。 平常在工作中我们常常会引用到第三方的开源库,比如Fresco、EventBus等。在gradle中用compile引用:compi...

2017-12-31 16:27:17 337 0

原创 MAC更新系统后,android studio提示git不能使用,提示missing xcurn at

今天更新mac系统后,然后就踩了这个坑启动Andtoid studio右下角提示然后点击 fix,调到设置页面git路径出现了问题提,我这里的解决方案是,下载一个git for mac的版本,安装完成后,在android studio页面改变git的路径就ok

2017-12-31 15:25:43 433 1

原创 自定义气泡,适配项目中的所有气泡

前言为什么要做这个工作呢?气泡的意义在于引导用户去使用应用中的新功能,所以版本迭代添加新功能的时候,就是使用气泡来引导用户去使用新功能。但是每次写气泡这个功能的时候,就需要重新去写一套代码去实现,这是十分浪费时间,而且不能统一管理气泡,因此需要将气泡做成一个工具,每次实现只需要变更内容、位置和尖角...

2017-11-30 20:35:32 1497 0

原创 对生活的一点感慨

这个月实在太忙了,基本上每天都是11点回到家,一直在做需求,没有什么技术储备,本来想看一下上传jcenter,但是到最后一步始终没成功,所以就没写博客,简单说一下自己对于生活一点小小的感慨,虽然我们是程序员,但是还是要努力将自己的生活过精彩,不要过的太无聊,除了工作日之外,不要一到周六日,就是宅在...

2017-10-30 13:35:01 937 4

原创 类加载器与双亲委派模型

1. 双亲委派模型1.1 什么是双亲委派模型首先,先要知道什么是类的加载器。简单说,类加载器就是根据指定全限定名称将class文件加载到JVM内存,装维Class对象。如果站在JVM的角度来说,只存在两种加载器: 启动类加载器(Bootstrap ClassLoader):由C++语言实...

2017-09-30 14:40:49 441 0

原创 带你简单理解Binder

前言我们看过很多关于Binder的文章,但是看完大多数文章后,都会有不知所云的感觉,是因为那些文章不够好吗?不是那些文章讲得不够好,我们看的不明白主要是存在两种情况,一种深入代码细节不能自拔,从FrameWork到Kernel层,长篇累牍,让人很难理解Binder;另一种是只讲framework层...

2017-08-29 18:23:19 1220 0

原创 RxJava学习笔记

RxJavaRxjava的GitHub官网上是这样介绍rxjava的:RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based pr...

2017-07-30 10:12:49 742 0

原创 华为北京研究所第一届黑客马拉松比赛-基于Android防止儿童走失

简介  这个项目是在2016年华为研究所举办的第一届黑客马拉松比赛时开发的项目,这个项目是借鉴之前写Android人脸对比,想出一个关于防止儿童走失的想法,然后增加浏览历史和定位失踪儿童以及推送附近人的功能。   其实整个项目并不难,并且也很粗糙,但是由于整个项目从开始到结束都是我一个人开发,尤...

2017-05-02 22:16:01 2295 0

原创 Android OpenGL渲染双视频

前言想做的有很多,奈何能力实在有限,所以只能一步一步来,将自己做出来的尽量用简单易懂的语言描述出来,希望自己总结的对阅读这篇文章的同学有所帮助。在上一篇文章中讲述了怎样在GLSurfaceView上预览Camera的视频数据,在本章中打算实现一个类似微信视频通话的效果,微信视频通话主要有大小两个视...

2017-04-23 12:42:58 6186 4

原创 Android OpenGL使用GLSurfaceView预览视频

前言一年之前做过一些即时通信视频相关的工作,主要是做视频渲染这一部分的工作,由于2016毕业来到了华为,华为对研究生的安排就是“哪里需要去哪里”,和你专业和擅长的没有太大的关系,所以一直在适应当下的工作,现在基本上可以胜任现在的工作,可以抽出一些时间来总结一下之前了解过的OpenGL相关知识。第一...

2017-03-19 16:32:50 19933 8

原创 GLSL基础

OpenGL Shading Language GLSL作为一种着色语言是纯粹的和GPU打交道的计算机语言。因为GPU是多线程并行处理器,所以GLSL直接面向SIMD模型的多线程计算。GLSL编写的着色器函数是对每个数据同时执行的。每个顶点都会由顶点着色器中的算法处理,每个像素也都会由片段着色器中...

2017-03-19 16:23:37 1177 1

原创 Java正则表达式

正则表达式一般用于字符串匹配、查找、替换、分割。例如:从网页中找出email地址,IP地址是否正确,从网页中找出连接等等。 符号 意思 \|反斜杠 \t 间隔(’\u0009’) \n 换行(’\u000A’) \r 回车(’\u000D’) \d ...

2017-03-19 16:22:16 488 0

原创 华为 emui 刷机解锁及回锁教程

刷第三方ROM,必须解锁bootloader获取权限一,申请解锁码 (1)申请解锁码链接 http://www.emui.com/plugin.php?id=unlock (2)申请解锁码办法 同意协议,选择智能手机,选择手机型号,输入产品S/N号,产品IMEI/MEID,产品识别码,...

2017-02-11 16:41:48 9779 0

原创 synchronized和ReentrantLock区别

sychronized在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。 当我们调用某对象的synchronized方法时,就获取了该对象的同步锁。例如,synchronized(obj)就获取了“obj这个对象”的同步锁。 不同线程对同步锁的访问是互斥的。也就...

2017-02-11 16:40:56 2207 0

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