自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (2)
  • 收藏
  • 关注

原创 Weex源码分析

Weex是跨平台的一种实践,令到开发者可以使用web语言来构建Android、iOS、web应用,实现一处编写,处处运行的效果,可以极大的降低人力成本,目前比较火的跨平台实践有React Native以及Flutter,weex相对小众一点,但是在功能上面也能够满足大部分的需求,而且接入也会相对简单,weex使用vue.js开发,本着知其然也知其所以然的原则,现在就来学习一下weex的源码。We...

2019-04-19 18:42:31 1766 2

原创 OKHttp3源码解析

OKHttp的源码框架很大,涉及的内容也很多,每个类每行代码都去读不实际,这里主要从以下几个点去研究它的源码实现.任务调度过程拦截器缓存机制连接池复用策略任务调度器Dispatcher直接先看源码入口: //将request传给RealCall,然后将RealCall放入Dispatcher去调度 okHttpClient.newCall(request).enqueue(th...

2019-04-24 17:10:45 232

原创 Program type already present问题解决

今天编译项目,遇到了一个问题,如下:java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: Program type already present: com.xx...

2019-04-23 12:09:50 20998 1

原创 Android 安全防护手段

Android在开发过程中,要如何去保证安全性的?尤其是对于一些金融类的app,安全显得更为重要,以下是一些关于安全防霾呢的建议和总结。混淆机制代码混淆 将代码的各种元素、如变量、函数、类的名字改写成无意义的名字。使代码变得难以阅读和理解。资源混淆 混淆之后资源的名字全是简单的混淆字母,例如: <string name=“a”>”#$Ges egg*</st...

2019-04-20 11:01:55 1289

原创 Java并发学习总结

可见性线程之间的可见性,一个线程修改的状态对另外的线程可见,即A线程改变了某个状态,B也能马上看到。用volatile修饰的变量就是可见的,不允许线程内部缓存和重排序,即直接修改内存,如果不是用volatile的话,不同的线程会先从主存中copy一个对象,放在CPU缓存中,导致不同的线程修改变量,其他的线程看不到,不过volatile它不保证原子性,例如: volatile int a = ...

2019-04-20 10:51:40 206

原创 Jetpack架构组件之Android Architecture

Android Jetpack 组件是库的集合,这些库是为协同工作而构建的,不过也可以单独采用,同时利用 Kotlin提高工作效率。可全部使用,也可混合搭配,这些库包括基础、架构、行为、界面四个模块,其中主要学习的是架构这个模块,也称为AndroidArchitecture,如图所示:Data Binding Library功能介绍:Data Binding Library 可以在布局中...

2019-04-20 10:38:37 273

原创 Java锁分类

Java中的单从名词上来听有很多种,例如乐观锁、悲观锁、轻量级锁等等,但是其实真正的锁实现无外乎就是Lock的实现类以及Synchronized,而这些锁大部分是根据不同的状态或者功能对锁进行的划分,从美团技术点评看到一篇比较好的文章,对于锁的划分很详细,原文链接:美团参考文档以下是参考该分类划分的锁概图:...

2019-04-20 10:24:27 602

原创 Java线程池

使用线程池的好处降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,要做到合理利用线程池,必须对其实现原理了如指掌。线程池的实现原理具体过程如图所示...

2019-04-19 20:40:23 680

原创 RTMP协议分析

RTMP协议分析用私有的可以和YouTube直播的app,用wireShark去抓包分析RTMP的协议:上面是抓包看到的具体过程,现在来详细分析一下。rtmp握手的过程:(图片从网上找来的,忘记出处了。)具体过程如下所示:首先是tcp握手建立client和server的连接通道;之后client向server发起rtmp握手请求,发送c0+c1+c2,用于校验rtmp版本...

2019-04-19 20:14:10 372

原创 事件总线Otto源码解析

Otto 事件总线示例Otto是发布订阅式框架。由Square开发,但是Square停止更新了,推荐用Rxjava来代替。还是来学习一下Otto的思想。首先来看看示例,定义一个Otto管理类,封装Bus的注册、取消注册,向外提供这些方法: public class OttoBusManager { private static OttoBusManager instance; ...

2019-04-19 19:49:37 166

原创 Java并发之CAS理解

CASCAS即compare and set,是可以保证线程安全的一种较为高效的方法,首先来看一下例子:int i = 0;public void increment(){ i++; //这里分为三步:1.读取i的值, 2. 对i进行+1操作 3.将+1后的i刷新回主内存} 这里如果有2个线程同时来调用这个方法,但是结果不一定是2,因为每个线程都有自己的工作内存,首先假设线程...

2019-04-19 12:10:13 218

原创 双亲委派模型

从Java虚拟机的角度来看,类加载器只有两种:启动类加载器,由C++实现,作为虚拟机本身的一部分;其他类加载器,由Java实现,独立于虚拟机,且全部继承自抽象类java.lang.ClassLoader.从开发人员的角度来看,类加载器可以再细分一点:启动类加载器:负责加载JAVA_HOME/lib下的类库,或者通过-Xbootclasspath指定的路径,且只能够加载被虚拟机识别...

2019-04-18 11:02:23 108

原创 HTTP & HTTPS详解

HTTP是应用层协议,用于客户端和服务端间的通信,来总结一下HTTP协议的具体内容以及细节。HTTP协议的请求和响应体解析首先看一下HTTP请求的一个例子,用whistle抓包,打开"https://baidu.com/",以下是得到的Request请求体:请求体Request:GET / HTTP/1.1 /** 表示当前是GET请求; / 表示URL路径,URL路径以/开头,后面没...

2019-04-17 11:41:36 1493

原创 Android 性能优化之绘制优化

绘制原理绘制过程主要由CPU进行Measure、layout、record、execute的数据计算工作,由GPU进行栅格化、渲染。CPU和GPU通过图像驱动层进行连接,CPU往图形驱动层的队列里面添加display list,GPU 从中取出来绘制。和绘制优化最紧密关联的是app的帧数fps,即每秒刷新多少次。每一帧其实是一副静止的图像,一秒内刷新多张图像,给人眼的感觉就是运动的,例如我们看的...

2019-04-15 21:19:55 248

原创 Android Hook示例

从《Android进阶解密》上面学习到的一个Hook示例。定义:HOOK可以是一个方法或对象,用于劫持请求,例如A请求B,然后可以在中间加入C,在A的请求中加入一些处理,例如改变参数或者返回值,起到欺上瞒下的作用。在应用程序中可以通过代理来实现。实现示例startActivity中间会调用Instrumentation的execStartActivity,那么可以实现一个代理类Instru...

2019-04-15 21:14:50 445

原创 Bitmap源码解析与优化

Bitmap一直是消耗内存的大户,项目中尤其要注意对bitmap的使用和优化, 要对bitmap正确使用,并且进行优化, 那就需要对bitmap的源码有一定的了解,那现在就来看看bitmap的源码。Bitmap 创建示例Bitmap一般结合ImageView显示,要使用bitmap,当然先要创建,Bitmap的创建方式有很多种,例如在XML中定义bitmap、通过bitmapDrawable生...

2019-04-15 21:05:50 952

原创 AMS 的启动过程

从前面学习知道,系统启动时,会启动SystemServer进程,而SystemServer进程又会启动各种系统服务,包括AMS,那么这个过程是怎么样的,现在就从SystemServer的main()进入看看。SystemServer.main() public static void main(String[] args) { new SystemServer().run();//调用...

2019-04-06 16:43:40 303

原创 Android 四大组件启动过程之Service的启动和绑定过程

Service启动和绑定过程Service的启动过程可以分为两个部分:ContextImpl 到AMS的调用过程ActivityThread启动Service先来看一下第一个过程。ContextImpl 到AMS的调用过程启动Service的入口是startService(),代码在ContextWrapper中,ContextWrapper的startService()又调用了内...

2019-04-06 12:15:54 829

原创 四大组件的工作过程之Activity的启动过程

Activity的启动过程Android组件有四个,Activity、Service、ContentProvider、BroadcastReceiver。首先来学习activity的启动过程,Activity有两种类型,一个是根Activity,即应用程序的第一个Activity,一个是普通的Activity,启动根Activity即是启动该应用程序。首先来看一下如何去启动根Activity,从...

2019-04-05 18:04:37 281

原创 Android 应用程序进程启动过程

应用程序进程启动分为两个大的步骤:AMS通过socket向zygote发送创建应用程序进程请求;zygote接收请求并创建应用程序进程应用进程创建后会启动Binder线程池以及开启消息循环机制那么现在来从源码具体的看一下应用程序进程如何启动:1. AMS通过startProcessLocked()向zygote进程发起创建应用程序进程的请求,代码如下:private final v...

2019-04-04 16:26:25 2423

原创 Android系统启动过程介绍

DVM与ART的区别?5.0后Android runtime由DVM改成ART,区别是?DVM:应用运行时,即时编译器将字节码编译成机器码,使得应用运行效率低ART:应用安装时,提前进行一次预编译,将字节码编译成机器码存储在本地,这样应用运行时就不用再编译一次了,运行效率大大提高。Android 系统启动过程Android 系统启动过程涉及到很多系统进程的启动以及各类服务的创建,首先...

2019-04-04 12:21:48 1296

原创 Gradle简单介绍

gradle在Android studio中和project的关系打开Android studio窗口,一般是一个工程下面有一个主module,和其他相关的依赖module,但是对于gradle来说,其实每一个module都是一个project,每个project下面都需要有一个buid.gradle,即是该project的编译脚本,但是如果针对每一个project都单独编译的话, 想必是个很耗...

2019-02-27 10:28:46 1966

原创 volatile、final内存含义以及happen-before规则

volatile和final在线程同步时起到很大的作用,那么在Java内存中这两个关键字是如何和线程同步关联起来呢,以及线程的happen-before规则又是怎么定义的呢?volatile的内存含义volatile用来修饰变量,可以保证变量每次都是从主内存中读取,但是它不保证原子性,先来看看具体的例子:public class VolatileExample { private s...

2019-02-22 21:09:42 563

原创 Android AMS源码分析阅读(三)

Activity 之stop过程在之前学习了AMS如何与客户进程进行交互,从而实现启动应用进程并且创建application以及activity,调用activity生命周期进行界面显示的过程。那么当activity显示了之后,如何停止呢?现在就来学习一下,activity停止有很多种情况,例如从A启动B,那么A需要通知,又或者点击了Home键、返回键等,但是其实最终都是会经过startActi...

2019-01-22 20:43:27 757

原创 Android AMS源码分析阅读(二)

AMS和客户进程间的交互之Application的创建过程Android应用程序的启动入口在ActivityThread的main()函数,在main()函数中创建了ActivityThread的实例对象,并且调用它的attach()去执行应用程序的启动流程,attach()中的工作就是调用ApplicationThread的attachApplication()去创建application,那...

2019-01-22 20:42:21 1197

原创 Android AMS源码阅读分析(一)

最近学习了柯元旦所著《Android内核剖析》之AMS原理篇章,结合自己的理解以及对源码的分析,记录一下学习心得,AMS代码非常多,而且和Application以及Activity之间的交互也相对繁杂,这里学习大致的主干流程,之后有时间会再去细看。AMS的功能AMS的功能可以概述为以下三个:首先来看看这个统一调度各个应用程序之间的activity,可以把AMS理解成一个管理员,管理着手机里...

2019-01-22 20:41:00 6931

原创 Android观察者模式

定义定义对象间一对多的关系,当一个对象改变时,所有和它关联的其他对象都得到该对象更新的消息,从而作出对应的处理。简单的例子Android内置了Observer和Observable,来看看观察者和被观察者的定义:观察者 public interface Observer { void update(Observable var1, Object var2); }被观察者pub...

2019-01-22 12:25:06 1940

原创 Android责任链模式

责任链模式介绍责任链模式指的是,当一个请求可能会经过各个对象的处理,并且每一个对象都可能终止该请求或者将该请求继续往下一个对象传递。这些对象形成了一条链,并且每个对象都有机会去处理该请求,直至该请求被处理掉。责任链的使用场景责任链有很多使用场景,例如Android中的OKHttp框架,又或者举个例子,当我们拿着一张报销单请求报销时,我们的请求过程是:1.直属领导审批,如果报销金额小于100...

2019-01-18 21:06:43 482

原创 android studio " Could not resolve com.android.support:appcompat-v7:26.1.0"

在Android  studio 3.0 的新工程依赖 “ com.android.support:design:26.1.0” 时,sync错误,报以下问题:   Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.android.support:appcompat-v

2017-11-13 11:16:00 23053 3

原创 ArrayDeque解析

ArrayDeque是一个双向队列,既可以实现栈,也能用作队列。内部通过数组来实现,能够同时在两端进行插入删除的操作,同时也是非线程安全的,如果在多线程中使用它,需要自己去处理同步操作,它不允许放入null元素。用作栈时,优于Stack,用作队列时,效率高于LinkedList.构造函数: public ArrayDeque() { //默认初始化一个长度为16的数组

2017-10-19 16:21:29 510

原创 Git 创建github远程仓库并关联本地项目

github上面创建仓库,然后关联本地代码到仓库的办法: 1、在github上面点击New reposity 创建一个仓库,如果没有缴费的话,我们创建的就是public的,创建私人的仓库要缴纳一定的费用。 2、创建完仓库之后,将本地项目和该仓库关联的步骤:    ①先cd到本地项目的文件夹,执行:git init    ②添加自述文件:git add README.

2017-09-21 14:07:30 574

原创 Android OKHttp源码解析

OKHttp的介绍以及使用 http://www.jianshu.com/p/fe2c00737d101、OkHttp是一个高效的HTTP库: *支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求 *如果SPDY不可用,则通过连接池来减少请求延时 *无缝的支持GZIP来减少数据流量 *缓存响应数据来减少重复的网络请求 *指在提高应用效率和节省流量2、

2017-09-14 20:56:12 522

原创 Android studio finished with non-zero exit value 1

finished with non-zero exit value 1

2017-08-09 14:58:33 851

原创 Android中MVP模式的实例

Android中MVP模式的使用实例。

2017-08-09 10:48:34 434

原创 Android---策略模式

   策略模式是我们非常常用的一种模式,在没有接触到设计模式之前,代码里面有太多的if/else,switch了,当层级越多时,代码就显得越晦涩臃肿,可读性低,如果需求更新时那更是一种灾难。而策略模式能够极大的提高代码的逻辑。下面来看看策略模式究竟是什么东西。   我们在项目当中经常会遇到实现某一个功能可能会有多种算法实现或者策略的时候,例如说根据服务器的返回值选择不同的算法去计算结果,...

2017-06-27 19:44:49 160

原创 Android--Builder模式

这次来说说Builder模式。      在Android中,我们需要在UI上面弹出一个dialog,经常会写如何代码:  private void showdialog(){ new AlertDialog.Builder(SecondAcy.this) .setMessage("This is a dialog") .setPositiveButt

2017-06-27 18:36:43 186

原创 Android--单例模式

刚开始做项目的时候,并不太关注设计模式的运用,现在回头看看,发现代码的质量不忍直视,当初在写的时候心里觉得很多地方是可以优化的, 奈何当时并不懂如何优化是好,后来仔细的去学了一下Android设计模式(何红辉、关爱民所著),受益匪浅,特做几篇笔记以做记录。  现在回头看看项目,发现很多地方代码质量可以得到很大程度的提升,代码不能只实现产品经理所需要的功能,还必须多考虑代码如何优化如何扩展,在需

2017-06-27 17:43:49 187

原创 android 根据区号判断手机号码是否符合格式

在Android项目开发中,在注册或者其他需要手机号码的地方,经常需要校验手机号码的有效性,那么我们如何判断手机号码的有效性呢,当然首先想到的是根据正则表达式来判断,不过不同国家的手机号码的长度不一样,同时我们要根据区号来判断是否该号码符合该区号,那么我们可以怎么做呢?下面提供一个我在项目中用到的方法。   首先,导入这个jar包。    http://pan.baidu.com/

2016-10-28 09:08:36 2652

Android根据手机区号判断手机号码的有效性

Android根据区号来判断该手机号码是否符合规则

2016-10-28

数据结构笔试复习题目

找工作会考到的笔试题目,数据结构全集,包括选择、填空,以及判断等等题目,复习好此资料对笔试面试有极大的帮助

2015-03-29

空空如也

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

TA关注的人

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