Windy's Journal


  • 首页

  • 归档

  • 标签

  • 分类

  • 关于

  • 搜索

Git常用命令详解

发表于 2018-09-23 | 分类于 Git

Git简介

Git是Linux之父Linus的第二个伟大的作品,它最早是在Linux上开发的,被用来管理Linux核心的源代码。后来慢慢地有人将其移植到了Unix、Windows、Max OS等操作系统中。

Git是一个分布式的版本控制系统,与集中式的版本控制系统不同的是,每个人都工作在通过克隆建立的本地版本库中。也就是说每个人都拥有一个完整的版本库,查看提交日志、提交、创建里程碑和分支、合并分支、回退等所有操作都直接在本地完成而不需要网络连接。

对于Git仓库来说,每个人都有一个独立完整的仓库,所谓的远程仓库或是服务器仓库其实也是一个仓库,只不过这台主机24小时运行,它是一个稳定的仓库,供他人克隆、推送,也从服务器仓库中拉取别人的提交。

Git是目前世界上最先进的分布式版本控制系统,没有之一,对,没有之一!

阅读全文 »

Kotlin入门指南

发表于 2018-04-28 | 分类于 Kotlin

Kotlin的优势

代码简洁高效、强大的when语法,不用写分号结尾,findViewById光荣退休,空指针安全、强大的扩展功能、函数式编程、支持lambda表达式、流式API等等

Kotlin基本语法

基本用法

类型和函数定义

在Kotlin中,常量用val声明,变量用var声明,关键字在前面,类型在后面以冒号:隔开,也可以省略直接赋值(自动进行类型推断):

1
2
3
4
var str: String = "hello"  //字符串
var a: Int = 10 //整形
var array: Array<Int> = arrayOf(1, 2, 3) //数组
var str2: String? = null //可空字符串变量

阅读全文 »

侵入性低扩展性强的Android换肤框架XSkinLoader的用法及原理

发表于 2018-02-10 | 分类于 Android , 换肤框架

前言

Android发展到现在,很多成熟的应用上已经集成了插件式换肤的功能,比如网易云音乐,手机QQ,QQ音乐等等。但是,成熟稳定易用的开源换肤框架并没有出现。

国内最早的插件式换肤框架是Android-Skin-Loader。后面也出现了一些在此基础上的改进版,比如:hongyang的ChangeSkin,andSkin,Android-skin-support,injor,QSkinLoader等等。大家都对Android-Skin-Loader做了一些改进,以使换肤过程侵入性更低,扩展性更强,使用更简单。但是还是会有一些不足之处,因此,XSkinLoader就诞生了。

XSkinLoader是在Android-Skin-Loader和QSkinLoader的基础上又进行了一次重大改进,主要的改进点有如下:

  1. 侵入性更低,换肤Activity并不用实现某个接口或者继承某个BaseActivity
  2. 支持布局里style中定义的属性换肤,默认支持了TextView的textColor和ProgressBar的indeterminateDrawable,并支持扩展;
  3. 更好地支持了AppCompatActivity中的控件换肤,由于AppCompatActivity中的TextView,ImageView等控件会被转为AppCompatTextView,AppCompatImageView,XSkinLoader换肤时并不会覆盖此转换,其他换肤框架会覆盖;
  4. 支持状态栏颜色换肤,并可以通过相似方法扩展支持标题栏和虚拟导航栏的换肤;
  5. 支持xml中指定的属性换肤

XSkinLoader项目源码地址为:https://github.com/WindySha/XSkinLoader

阅读全文 »

Android APP适配全面屏手机的技术要点

发表于 2018-02-07 | 分类于 Android , 全面屏适配

关于全面屏

全面屏是手机业界对于超高屏占比手机设计的一个宽泛的定义。从字面上解释就是,手机的正面全部都是屏幕,四个边框位置都是采用无边框设计,追求接近100%的屏占比。但受限于目前的技术,还不能做到手机正面屏占比100%的手机。现在业内所说的全面屏手机是指真实屏占比可以达到80%以上,拥有超窄边框设计的手机。

全面屏手机屏幕的宽高比例比较特殊,不再是以前的16:9了。比如三星的Galaxy S8屏幕分辨率是:2960×1440,对应的屏幕比例为:18.5:9。VIVO X20手机屏幕分辨率是2160x1080,对应的屏幕比例:18:9。对于这种奇葩的屏幕比例,APP开发者该如何去优化自己的应用,才能在这些手机上显示的更加完美呢?下面,从以下两个方面来探究APP完美适配全面屏手机的方法。

  • 更大的屏幕高宽比例
  • 虚拟导航键(NavigationBar)
阅读全文 »

Android AOP编程的四种策略探讨:Aspectj,cglib+dexmaker,Javassist,epic+dexposed

发表于 2018-01-18 | 分类于 Android , Aspectj

前言

AOP:面向切面编程(Aspect-Oriented Programming)。

它和我们平时接触到的OOP都是编程的不同思想,OOP,即『面向对象编程』,它提倡的是将功能模块化,对象化,而AOP的思想,则不太一样,它提倡的是针对同一类问题的统一处理。

利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,提高开发效率。

那么AOP这种编程思想有什么用呢,一般来说,主要用于不想侵入原有代码的场景中,例如SDK需要无侵入的在宿主中插入一些代码,做日志埋点、性能监控、动态权限控制、甚至是代码调试等等。

下面介绍Android开发中四种实践AOP编程的方案。

阅读全文 »

深入理解JVM之Java字节码(.class)文件详解

发表于 2018-01-18 | 分类于 Java

Understanding bytecode makes you a better programmer


前言

作为一个Java开发者,对技术的追求而不仅仅停留在会用API,会写基本功能上,要想在技术上有更高的造诣,就需要深入到原理层面去认识代码运行的机制。因此,本文从class字节码文件的结构入手,一步步来解剖二进制字节码的内部工作原理,这对深入理解JVM的运行机制大有裨益,同时,对于想要使用BCEL来动态改变Class字节码指令的工作也很有帮助(示例:JVM Class字节码之三-使用BCEL改变类属性)。

阅读全文 »

Android热修复框架AndFix核心代码分析以及纯Java代码实现AndFix

发表于 2018-01-15 | 分类于 Android

前言

AndFix,全称是Android hot-fix,是阿里开源的一个Android热修复框架,允许APP在不重新发布版本的情况下修复线上的bug。就目前来说,AndFix支持Android 2.3到6.0版本,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime。 这个框架的核心技术点有两个方面:

1.通过apkpatch工具生成一个.apatch格式的补丁文件,加载补丁文件,并在修复时通过@MethodReplace的注 解,找到需要替换的方法进行修复。
2.找到Java层的Method对应Native层的结构体方法的指针,然后替换结构体的成员每一项数据,完成修复。

针对第二点,在native层,需要分Art和Dalvik虚拟机分别做处理,因为两种虚拟机下,java层Method对应的Native结构体完全不相同。
本文只针对Art虚拟机下Native层的方法替换进行解析,并基于AndFix修复原理,手写一个简易的热修复框架。

阅读全文 »

超级实用的Android轻量级磁盘缓存工具DiskDataCacher用法以及原理

发表于 2018-01-15 | 分类于 Android

DiskDataCacher是一个轻量级的Android磁盘缓存工具,基于LRU算法实现,同时可以设置缓存有效期,使用起来十分方便。
源码托管:DiskDataCacher

工具用途

  • 用于缓存网络请求返回的数据,并且可以设置缓存数据的有效期,比如,缓存时间假设为1个小时,超时1小时后再次获取缓存会自动失效,让客户端重新请求新的数据,这样可以减少客户端流量,同时减少服务器并发量。
  • 用于代替SharePreference当做配置文件,缓存一些较大的配置数据,效率更高,可以减少内存消耗。
    SharePreference 不能用来缓存较大数据的理由:请不要滥用SharedPreference
  • 支持扩展,扩展后可以缓存JsonObject、Bitmap、Drawable和序列化的java对象等等。
    阅读全文 »

Gmail,OutLook账户基于Oauth2.0协议授权登录邮箱客户端的功能实现

发表于 2018-01-12

邮箱登录安全

考虑到邮箱登陆的安全性,使用这种登陆方法,用户不用暴露帐号密码给我们客户端就可以进行收发邮件,google推荐用户使用网页授权登陆的方式来登陆Gmail邮箱。
经过研究后,得知,这种授权登陆的方式都是给予Oauth2.0协议。很多第三方的邮件客户端都已实现了给予Oauth2.0授权登陆这一功能,例如:

WPS邮箱,QQ邮箱,网易邮箱大师实现了gmail的授权登陆
WeMail,myMail等客户端实现了gmail和outlook的授权登陆
微软的Outlook客户端实现了gmail,outlook,yahoo,office365的授权登陆
ios邮件实现了gmail,yahoo的授权登陆

Oauth2.0协议流程

经研究,发现整个流程就是基于Oauth2.0协议和Imap协议的。Oauth2.0授权登陆流程具体如下:

Oauth2.0授权模式有多种,这里使用简化模式登陆最方便。
简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了”授权码”这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。

阅读全文 »

详解基于LRU缓存的LruCache类及其在Android内存优化中的应用

发表于 2018-01-12

今天与大家分享一下图片的缓存技术,利用它可以提高UI的流畅性、响应速度,给用户好的体验。

如何在内存中做缓存?

通过内存缓存可以快速加载缓存图片,但会消耗应用的内存空间。LruCache类(通过兼容包可以支持到sdk4)很适合做图片缓存,它通过LinkedHashMap保持图片的强引用方式存储图片,当缓存空间超过设置定的限值时会释放掉早期的缓存。

注:在过去,常用的内存缓存实现是通过SoftReference或WeakReference,但不建议这样做。从Android2.3(API等级9)垃圾收集器开始更积极收集软/弱引用,这使得它们相当无效。此外,在Android 3.0(API等级11)之前,存储在native内存中的可见的bitmap不会被释放,可能会导致应用程序暂时地超过其内存限制并崩溃。

什么是LruCache?
LruCache实现原理是什么?

要回答这个两个问题,先要知道什么是LRU。
LRU是Least Recently Used 的缩写,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存100M的数据,当总数据小于100M时可以随意添加,当超过100M时就需要把新的数据添加进来,同时要把过期数据删除,以确保我们最大缓存100M,那怎么确定删除哪条过期数据呢,采用LRU算法实现的话就是将最老的数据删掉。利用LRU缓存,我们能够提高系统的performance.

阅读全文 »

12
Windy

Windy

用技术撬动地球

20 日志
29 分类
47 标签
RSS
GitHub 简书
© 2024 Windy
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4
  |  本站总访问量84741次   |  本站访客数57194人次