- 博客(45)
- 资源 (11)
- 收藏
- 关注
原创 PWA 渐进式实践 (3) - 用户体验 & 性能
为了让我们的网站能达到更高的评分(咦,为什么变成刷分了),我们最后需要进行用户体验和性能的优化。
2017-02-06 12:00:41
3177
原创 PWA 渐进式实践 (2) - Service Worker
通过完善 Service Worker,我们的评分已经嗖嗖嗖上了80,达到了83分。
2017-02-06 11:58:36
3343
原创 PWA 渐进式实践 (1) - Lighthouse in Action
本篇中我们大致看到了哪些问题导致了我们的 webapp 的 PWA 评分不够高,下一次,我们会开始逐个开刀,解决这些问题。对本话题感兴趣的朋友,也可以使用 Lighthouse 插件,对自家的网站或者其他网站来评评分,看看做得有多好(其实我们的**66分**真的已经挺高了)。
2017-02-06 11:57:53
1535
原创 从零开始的Android新项目11 - 组件化实践(1)
我个人一直是比较反感黑科技的,其中首当其冲的就是 插件化 以及 保活。作为一个开发者,除了研究技术,提高自己以外,是否应该考虑些其他东西呢?尤其是我们这些嵌入式系统(客户端)开发者,在依赖、受哺于系统生态下,是不是应该考虑一下,怎么反哺?怎么去更好地维护这个生态环境,而不是一味破坏、消耗它呢?
2017-02-06 11:49:23
3811
2
原创 记一次 Data Binding 在 library module 中遇到的大坑
使用 Data Binding 也有半年多了,从最初的 setVariable,替换 findViewById,到比较高级的双向绑定,自定义 Adapter、Component,查看源码了解编译、运行流程,也算是小有成果,且没有碰到 Data Binding 本身实现上的问题。然而,最近在一次重构组件化(见 MDCC 上冯森林的《回归初心,从容器化到组件化》)的过程中,碰到了一个比较严重的 BUG。
2017-02-06 11:48:05
3690
原创 React Native 0.31 Bundle 预加载优化
使用 React Native 开发混合应用的过程中,我们在打完 bundle 进 release 包后,会发现第一次进入页面(React 的 Activity)会有一个短暂的白屏过程(在真机上近 1秒,在模拟器上比较快,在 200毫秒 左右),而且在完全退出后再进入,仍然会有这个白屏。仔细查看加载过程(其实猜猜都能知道)后可以发现,这个过程就是在加载我们的 js bundle,通常即便是一个小的
2016-08-22 11:14:29
5398
原创 从零开始的Android新项目10 - React Native & Redux
本篇来讲讲 React Native 和 Redux,和其他一上来就啪啪啪丢上来一堆翻译的东西不同,本文会从简单的例子入手,让大家能快速地明白 React Native 是什么,Redux 和常见的 MVC、MVP 等有什么区别,怎么去组织一个 Redux 架构的 React Native 项目。为避免大家还没入门就放弃,下一篇才会从我们项目中的实践出发,讲讲更复杂的应用场景。
2016-08-18 10:28:20
7135
1
原创 从什么都不懂开始(四)——Git掌握时空之力
看到这篇标题是不是有种很叼的感觉!?在Git的工作流程中,不仅能往前走,当然也可以后退。不仅能提交 文件,当然也能删除或者修改了。而且你想回到哪个提交节点就回到哪个提交节点, 是不是觉得自己体内的洪荒之力快抑制不住了?别急,容我短话长说,一一道来。在这真正讲这些也需要普及一个概念:工作区和暂存区工作区和暂存区如果有同学对这些概念感觉很懵逼,也没什么关系,不影响你的使用,只要扫一眼接下来的两个标题
2016-07-29 11:15:21
2571
原创 Data Binding Component详解 - 换肤什么的只是它的一个小应用!
上一篇从零开始的Android新项目8 - Data Binding高级篇中,我们提到了使用Component来进行注入,以方便进行测试的功能,有一些朋友说写的不够清楚,还有些疑惑,所以本篇就来详细说说Component。作为例子,我们的实现目标是使用Data Binding Component,让应用全局的TextView的文本都能随时变成test,还能进行全局换肤。
2016-07-27 17:30:57
2925
原创 从什么都不懂开始(三) 实践带你飞之Branch操作
本篇将介绍一下Git中经常需要操作到的东西,以及项目中运用到的场景,会稍微带一点基础知识,笔者觉得阮一峰老师的Git入门讲的非常到位了,我就不班门弄斧了,就讲一下项目中遇到的一些情况。若是Git大牛就可以点击返回或者关闭啦~ 此文多图预警~用流量的童鞋注意哦。Repository介绍在版本管理中,Repository翻译成中文就是仓库的意思,每个提交到本地,或者push到远程服务器的Project
2016-07-27 16:54:55
8109
1
原创 从什么都不懂开始(二)——创建Project提交到Github需要做什么
背景接上篇,在理解什么是git后,总需要动手操作一下,还是那句话~针对Git很熟练的大牛们可以点击返回或者关闭啦~在看这篇文章之前你得准备好什么?1、注册好的你Gihub账号 2、在setting里的SSH里有你电脑的SSHKey了。 3、准备好你自己需要放在git的文件夹 如果不会以上1、2两点的同学,请自行Google或者Baidu。将你的Project初始化成GitProject以下将以
2016-07-27 16:53:23
3289
原创 从什么都不懂开始(一)——什么是Git
前言背景用了Git蛮久了,也没有怎么系统地学习过,大部分情况也是比较依赖编译器,所以想从头梳理一下Git基础,就想写一篇从没用过Git的人也能看懂,并能入门,再渐渐成长。 一些运用git很熟练的大牛们可以点击返回或关闭啦~简介在了解Git之前,你得先了解什么是版本控制系统,如果不知道什么是版本控制系统,你可以先简单的理解成“可以追踪每次文件修改的系统,如果你某次修改出错,想回退,那么可以回退到某次
2016-07-27 16:52:11
4641
原创 从零创建项目实践
背景大帅MarkZhai的从零系列火遍大江南北,奈何大帅最近要做爸爸了,忙得没有时间出demo,文章中一些细节部分没有上代码,一些粉丝肯定看的不知所措,所以做小弟的就替大哥为大家整理了个demo。接下来会结合大帅的理论为大家讲述一下如何实践,在本文的最后会附上Demo地址。关于本实践的说明本实践是为了方便,调用github的api,抓取了我们moduth组的repo热身运动先要补充一点知识的细节才能
2016-07-27 16:51:11
937
原创 微信热修复开源库 Tinker imitator 原理篇
参考资料:微信Android热补丁实践演进之路 简单来说,在编译时通过新旧两个Dex生成差异patch.dex。在运行时,将差异patch.dex重新跟原始安装包的旧Dex还原为新的Dex。这个过程可能比较耗费时间与内存,所以我们是单独放在一个后台进程:patch中。为了补丁包尽量的小,微信自研了DexDiff算法,它深度利用Dex的格式来减少差异的大小。它的粒度是Dex格式的每一项,可以充分利
2016-07-27 13:06:24
9094
原创 从零开始的Android新项目9 - 前端用后台接口设计
这回来讲讲后台接口的设计。可能有同学会觉得后台的接口和我们大前端开发有什么关系?试想一下,在碰到一些不合理的接口设计的时候,你们开发是否觉得很别扭——需要为了坑爹的接口写很多脏代码引坑?甚至,这么开发出来的页面,体验也会很差?我们不是说硬无理要求后端接口按照前端业务去封装,而是说为了项目更好地发展,为了用户能有更棒的体验,应该有讨论商量的空间。一些差劲的设计,应该被拒绝。本文使用前端来指代 Andr
2016-07-27 12:39:36
5550
1
原创 从零开始的Android新项目8 - Data Binding高级篇
承接上篇,本篇继续讲解一些Data Binding更加进阶的内容,包括:列表绑定、自定义属性、双向绑定、表达式链、Lambda表达式、动画、Component注入(测试)等。Demo源码库:DataBindingSample。列表绑定App中经常用到列表展示,Data Binding在列表中一样可以扮演重要的作用,直接绑定数据和事件到每一个列表的item。RecyclerView过去我们往往会使用L
2016-07-27 12:37:56
6292
1
原创 从零开始的Android新项目7 - Data Binding入门篇
Data Binding自从去年的Google I/O发布到至今,也有近一年的时间了。这一年来,从Beta到如今比较完善的版本,从Android Studio 1.3到如今2.1.2的支持,可以说Data Binding已经是一个可用度较高,也能带来实际生产力提升的技术了。然而事实上,真正使用到Data Binding的公司、项目仍然是比较少的。可能是出于稳定性考虑,亦或是对Data Binding
2016-07-27 12:37:04
3653
1
原创 从零开始的Android新项目6 - Repository层(下) Realm、缓存、异常处理
承接上篇 从零开始的Android新项目5 - Repository层(上) Retrofit、Repository组装,本文继续介绍Realm、缓存,以及统一的异常处理设计。RealmRealm在移动端数据库中也算是比较有名的一款了,以其跨平台和惊人的速度而闻名。啊,对了,还有文档多。这里要黑的就是文档问题,Realm虽然乍一看文档很多,但是老实说,写的挺乱的。不过总体来说,实践和应用中感觉还不错
2016-07-27 12:36:01
2053
原创 从零开始的Android新项目5 - Repository层(上)
如期而至的Repository篇,内部实现则由Realm、Retrofit,以及内存级LruCache组成。 Repository,顾名思义,即仓库,向上层屏蔽了数据来源和内部实现细节,不需要了解货物来源,只需要拿走就行了。由于篇幅问题,将分为上下两篇,本篇主要介绍Retrofit的应用和Repository层组装,下篇会讲解本地缓存(包括Realm和内存缓存)以及基于异常的设计。Why Repo
2016-07-27 12:17:07
3259
原创 从零开始的Android新项目4 - Dagger2篇
转载请注明出处Dagger - 匕首,顾名思义,比ButterKnife这把黄油刀锋利得多。Square为什么这么有自信地给它取了这个名字,Google又为什么会拿去做了Dagger2呢(不都有Guice和基于其做的RoboGuice了么)?希望本文能讲清楚为什么要用Dagger2,又如何用好Dagger2。本文会从Dagger2的起源开始,途径其初衷、使用场景、依赖图,最后介绍一下我在项目中的具
2016-07-27 12:12:49
1441
原创 从零开始的Android新项目3 - 谁告诉你MVP和MVVM是互斥的
去年5月左右的时候,笔者在逛GitHub的时候,看到了一个MVP的项目,叫做mosby,仔细看了源码和作者介绍的文章后,发现确实有点意思,虽然会需要多写几个类和方法,但是解决了activity/fragment过重的问题,通过V/P分离能够帮助提高可维护性。时至去年年底,今年年初,MVP才逐渐被大家所知,也不时看到些文章介绍其概念和实践。再说说MVVM (Model-View-ViewModel),
2016-07-27 12:01:47
2090
原创 从零开始的Android新项目2 - Gradle篇
相信大家的项目用上gradle都已经很久了,但用得如何呢?这里分享一下我的gradle脚本,大部分都是去年6月左右就开始用上的,有一部分比如签名的安全保存则是最近才自己动手,做了令自己觉得还不错的方案。module类型的区分科普小结,可能有些同学不太明白Java library module和Android library module是怎么区分的,其实就是个plugin的区别,在module的bu
2016-07-27 11:55:14
1688
原创 从零开始的Android新项目1 - 架构搭建篇
最近一直在忙新项目的事情,所以有的坑一直没填。。现在看来可能一时半会儿还填不了,倒不如记录一下新项目的搭建。试想一下,如果没有历史负担,没有KPI压力,去新搭建一个项目,你会怎么设计和实现呢?本系列文章不是教你怎么从0开始学Android,从0开始怎么建一个项目,而定位于零负担的情况下,在2016年怎么去创建一个好的Android项目,其中一部分技术并不太适合刚入门的初学者。Application
2016-07-27 11:54:14
2775
原创 Android逆向分析(一) - 反编译看看手Q口令红包的实现原理
本系列文章是《Android软件安全与逆向分析》的实践笔记(一些工具的版本和用法已经不同了),同时笔者希望系统性地记录一下逆向方面的文字和想法。第一篇作为开始,先讲讲简单的反编译和如何跟踪一些逻辑的实现,以便进行hack。
2016-02-09 13:21:54
3961
2
原创 在Mac 10.11编译最新的Android 6.0
背景因为只有一台可怜的256G MBPR,并没有足够的空间去装一个Ubuntu,所以之前在10.10的时候尝试编译5.0未果后(各种版本问题),就无奈放弃了。 前几天在看最新的aosp官网介绍时候https://source.android.com/source/initializing.html#branch-60x,发现master和6.0.x的编译都使用了or later来描述对mac os
2015-11-25 14:34:02
1659
原创 各大热补丁方案分析和比较
最近开源界涌现了很多热补丁项目,但从方案上来说,主要包括[Dexposed](https://github.com/alibaba/dexposed)、[AndFix](https://github.com/alibaba/AndFix)、[ClassLoader](http://bugly.qq.com/blog/?p=781)(来源是原QZone,现淘宝的工程师陈钟,在15年年初就已经开始实现)三种。
2015-11-24 16:03:15
1763
原创 OkHttp是怎么工作的 - 从介绍到分析
OkHttpRetrofit使用OkHttp,Volley支持替换底层http栈为OkHttp,甚至Google的最新源码里,都用起了OkHttp,替换了原来用的HttpClient。笔者虽然一直听说OkHttp怎么怎么好,但始终云里雾里究竟它如何优越,所以抽空瞄了瞄源码,小小分析一下。官网说了什么okhttp官网HTTP/2 和 SPDY 支持允许所有到同一个host的请求共享一个socket。
2015-10-25 11:04:39
3501
原创 Android任务流调度 - Init
Github PageInit Init帮助Android应用调度复杂的任务流(如应用初始化流程),如下一节图示的那种任务流,处理类型、优先级、多进程(像是每个进程都会执行application的onCreate),任务依赖,提高应用启动效率。尽管Init设计的初衷是为了应用(application)初始化,但并不局限于此,它可以于应用在任何复杂的初始化流程。Init不依赖于任何第三方库,使用Jav
2015-10-05 19:56:33
1522
原创 React Native for Android初探
See http://blog.zhaiyifan.cn/2015/09/16/Try-React-Native-for-Android/OverviewFacebook 今天发布了 React Native for Android,把 Web 和原生平台的 JavaScript 开发技术扩展到了 Google 的流行移动平台。Android开发者们终于也能试试React了。本文就从https://
2015-09-16 12:02:20
1548
原创 Android换肤技术总结
Android换肤技术总结背景纵观现在各种Android app,其换肤需求可以归为 - 白天/黑夜主题切换(或者别的名字,通常2套),如同花顺/自选股/天天动听等,UI表现为一个switcher。 - 多种主题切换,通常为会员特权,如QQ/QQ空间。对于第一种来说,目测应该是直接通过本地theme来做的,即所有图片/颜色的资源都在apk里面打包了。而对于第二种,则相对复杂一些,由于作为一种线上
2015-09-10 23:50:14
2424
原创 Facebook Rebound 弹性动画库 源码分析
Rebound源码分析今天看到了tumblr发布了基于rebound的Backboard,本想直接分析一下Backboard对rebound做了些什么,不过考虑到rebound还没有仔细分析过,所以这里做一下源码分析。对外部来说,首先接触的就是SpringSystem了,但在说它之前,先让我们
2015-09-10 10:14:56
3664
原创 intellij老是警告的SparseArray是什么 - HashMap的替代者
序言身为一个有代码洁癖的程序员,在写Android应用的时候,我总是会去注意代码规范(Google Android Guideline)能一行搞定的代码,绝不写两行决不让编译器(intellij, as)右边滚动条有黄色不重复自己当然了,实际开发中,编译器报的warning有些不太好避免,比如有些空指针,编译器从android源码来看,觉得不会出现空指针,但是实际情况下….你懂得,部分ro
2015-08-28 17:10:04
1412
原创 Java和Android中,代码块、static静态代码块的执行顺序
Java和Android中,代码块、static静态代码块的执行顺序有没有什么区别呢。
2015-08-28 11:11:54
5100
原创 关于android客户端的导航栏(toolbar)
title: 关于android客户端的导航栏 date: 2015-08-25 16:34:40 categories: - android tags: - android- toolbarbackgroundandroid客户端开发过程中,所有页面都会有的一个元素,也就是导航栏了(标题栏),尽管Google给我们提供了ActionBar和升级版的Toolbar,但是在中国的移动端设计中
2015-08-27 19:58:14
1879
原创 说说耦合(coupling)
coupling, 即两个东西之间的一种连接,使他们彼此关联。以前大学里学软件工程和面向对象的时候,就时常听到解耦和低耦合,所以现在在做开发的时候,也往往会去想,怎么降低耦合度呢。软件工程书籍中,这么写道,高内聚及低耦合可以给我们软件开发人员带来可读性、复用性、可维护性和易变更性。耦合天成软件开发过程中,耦合是不可避免的,除非做出来一个超级巨大,包含一切功能的类/模块,都放在里面做(这显然并不是高内
2015-08-27 15:25:59
2586
原创 EventBus 2.4 源码分析
EventBus简介本篇基于EventBus 2.4撰写。Android optimized event bus that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality.上面是从官方repo拉来的代码,大致是说简化的组件之间的交流通信,
2015-08-20 22:39:33
1219
原创 EventBus, otto, LocalBroadcast的选择
EventBus, otto, LocalBroadcast的选择greenrobot的EventBussquare的ottoandroid support包里提供的LocalBroadcast三者都是类似订阅/发布的模式,降低了耦合度。与callback比起来,这种事件总线的模式使得两个类没有直接的依赖关系,对架构来说进行了解耦,把双向依赖变成了单向依赖,在大型项目中尤其显得重要。Why
2015-08-17 15:17:00
2349
原创 使用mosby框架 应用MVP模式实现邮件客户端
本文内容结合http://hannesdorfmann.com/android/mosby-playbook/前置内容http://hannesdorfmann.com/android/mosby/apk下载体验https://github.com/sockeqwe/mosby/releases/download/1.1.0/sample-mail.apk不
2015-06-29 16:00:14
1631
原创 Photo Sphere调查小结
去年在网上查了一下Photo Sphere和街景相关的内容,做一下小结。Photo Sphere是只有Google Camera有的一个功能,其拍摄后会将图片进行处理并保存为jpg,虽然看也能看,但是效果不是很好,且手机上目前没有独立的Viewer,这个jpg里面保存了很多metadata,解析出来看到有Google Developer上也有相关介绍http
2015-06-27 19:27:58
2961
原创 实现类似Tumblr的Title Bar跟随滑动渐变的效果
轻博客应用Tumblr中,在看他人的主页时候,可以看到顶部title bar的一个很酷炫的体验,当在最顶端,整个title bar的背景是透明的,而上面的字体和图标是白色的,随着逐渐滑下来,背景逐渐不透明变白,而图标及字体则渐渐灰起来。如下图整个滑动的效果很好,简直忍不住多滑几次。那么这个效果是怎么实现的呢。秘密自然都在listview的onScroll上。根据
2015-06-27 18:27:24
4037
1
英特尔Hadoop发行版 2.2 开发者指南
2012-12-20
Linux 2.6内核标准 Part4 (Final)
2012-03-19
Linux 2.6内核标准 Part3
2012-03-19
Linux 2.6内核标准 Part2
2012-03-19
Linux 2.6内核标准 Part1
2012-03-19
国际软件工程知识体系SWEBOK
2011-07-05
软件可靠性模型 软件测试
2011-07-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人