自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ZionLife的博客

人生在于折腾

  • 博客(36)
  • 收藏
  • 关注

原创 Java并发编程学习笔记(2)硬件基础

概述这篇笔记记录了多线程编程中的硬件基础。从处理器的存储系统出发,在硬件层面解释了多线程编程中的可见性、有序性问题产生的原因及解决方案中的硬件支持。高速缓存引入高速缓存的原因现代处理器处理能力要远远胜于主内存的访问速率。为了弥补处理器与主内存之间速率的鸿沟,在他们之间引入了高速缓存(Cache)。 高速缓存是一种存取速率远比主存快,但容量远远小于主存的存储部件。每个处...

2018-03-22 09:20:24 329

原创 Java并发编程学习笔记(1)基本概念

线程的生命周期状态NEW:一个已创建而未启动的线程出于该状态。RUNNABLE:该状态可以被看成一个复合状态,包含两个子状态:READY和RUNNING。前者表示线程可以被线程调度器(Scheduler)进行调度而使之处于RUNNING状态。后者表示该线程只在运行。执行Thread.yield()线程可能由RUNNING转换为READY。处于READY子状态的线程也被称为活跃线程。 ...

2018-03-15 10:31:19 443

原创 线程池深入解析笔记

https://www.jianshu.com/p/117571856b28 https://juejin.im/entry/58fada5d570c350058d3aaad概述这篇笔记也是整理于寒假实习期间,由于美颜相机demo中的缩略图渲染功能涉及到多线程,使用了线程池减少资源开销,所以整理一下线程池笔记,以便以后查询(待完善)。 使用线程池的主要目的在于: 1. 降低资源消...

2018-03-11 20:36:37 348

原创 Activity启动过程

概述Activty是四大组件之首,重要性不言而喻。这篇笔记整理于寒假实习期间,大致总结Activity的启动流程,由于整个启动过程实在太绕,调用链太长,暂时没有完整分析一遍,空缺的看需要再补充。分析过程以API-26为基础。几个基础对象ActivityManagerService:简称AMS,服务端对象,负责系统中的所有Activity的生命周期。ActivityThread:Ap...

2018-03-11 20:31:37 790

原创 Dalvik虚拟机内存管理与垃圾回收相关

概述这篇笔记摘抄自老罗的博客: http://blog.csdn.net/luoshengyang/article/details/41338251 http://blog.csdn.net/luoshengyang/article/details/41822747 Dalvik虚拟机内存分配的底层依赖是基于Doug Lea编写的dlmalloc内存分配器的,在Heap上完成。按照分配规...

2018-03-11 20:22:46 545

原创 Broadcast相关总结

个人对广播使用得不多,在目前接触的项目开发中暂时没有使用到广播作为组件间交流工具,仅仅是在做应用复活的时候,接触过利用系统广播拉活的机制(现在已经不那么灵验了)。不过广播接收者作为Android四大组件之一,其重要性自然不言而喻 ,也是各类面试的常客,还是得好好总结一番。定义广播是一种广泛应用的在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可

2017-10-11 18:42:30 366

原创 OkHttp深入理解(5)CallServerInterceptor

这是整个拦截器链中的最后一个拦截器,经过了前面拦截器进行的准备工作,在CallServerInterceptor中会真正向服务器发起请求。intercept方法的代码不多: @Override public Response intercept(Chain chain) throws IOException { RealInterceptorChain realChain = (RealIn

2017-10-11 14:04:30 675 2

原创 OkHttp深入理解(4)ConnectInterceptor

CacheInterceptor中如果没能成功使用缓存,接下来就要准备向服务器发起请求。所以接下来的拦截器就是ConnectInterceptor。ConnectInterceptor的主要职责是负责与服务器建立起连接。ConnectInterceptor的intercept方法很精简,直接上源码: @Override public Response intercept(Chain chain)

2017-10-10 18:35:38 875

原创 MVC与MVP对比

MVC模式MVC的全称是Model-View-Controller,模型-视图-控制器。MVC是一种框架模式而非设计模式。GOF把MVC看作是三种设计模式——观察者模式、策略模式与组合模式的合体,核心是观察者模式,也就是一个基于发布/订阅者模型的框架。在Android开发中,View对应的是各个布局文件,Controller对应的是Activity,而Model层主要是对应于从本地或网络获取数据、处

2017-10-09 20:48:17 700

原创 OkHttp深入理解(3)BridgeInterceptor与CacheInterceptor

上一篇笔记主要记录了RetryAndFollowUpInterceptor的功能,主要负责根据response决定是否对请求进行重定向。这篇笔记记录链中的下两个结点BridgeInterceptor与CacheInterceptor。BridgeInterceptor BridgeInterceptor负责在request阶段对请求头添加一些字段,在response阶段对响应进行一些gzip解

2017-10-09 09:33:35 704

原创 OkHttp深入理解(2)RetryAndFollowUpInterceptor

OkHttp的精髓之一就在于Interceptor。其内部已经为我们定制了五个Interceptor——RetryAndFollowUpInterceptor、BridgeInterceptor、CacheInterceptor、ConnectInterceptor、CallServerInterceptor。除了系统预设的五个Interceptor之外,我们还可以自定义Interceptor实现各

2017-10-08 19:22:00 595

原创 OkHttp深入理解(1)综述

用OkHttp这么久,一直只知道基本用法, 没有去深入探究,以至于遇到一些需求的时候不知道该如何实现,在网络请求部分中写了许多冗余代码,对于有代码洁癖的我来说简直太痛苦了。现在查阅了许多资料,也慢慢看了一些源码,总算有了粗略的了解。    OkHttp的总体流程大致如下:          首先通过OkHttpClient.Builder创建一个client对象,然后通过Req

2017-10-08 13:42:52 663 2

原创 责任链模式

概述    责任链模式(Chain of Responsibility),是行为型设计模式之一。在编程中,将每一个节点看做是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径一次传递给每一节点对象,直到有对象处理这个请求为止。定义    使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这对象连成一条链,并沿着这条链传递该请求

2017-10-05 11:26:19 339

原创 性能优化系列之fragment的懒加载

自从实习以来一直在忙着赶项目进度,没有时间(懒)总结。现在终于有空总结一下这两个多月的收获了。从性能优化中的fragment懒加载开始梳理吧。     项目中使用ViewPager+Fragment,拿练手项目xMusic来说吧,在MainActivity中有两个fragment,一个是本地播放页面,一个是“发现”页面,“发现”页面包含广告轮播图和推荐歌单,图片资源比较多。正常打开app时两个

2017-09-14 17:57:11 2581

原创 观察者模式与Fragment间通信

前两天腾讯电话面试,被狠狠地虐了一把。本来以为还有周末两天可以好好准备,居然投完简历半个钟就打电话过来了,心塞。面试官提到一个问题,fragment间怎样实现通信。我回答通过Activity做中介。面试官要求用低耦合的方式,一时没想起。后来上网找了一下发现可以通过观察者模式来实现。虽然也是通过Activity做中介,但是不是直接在Fragment中通过操控另一个Fragment方式,而是在frag

2017-06-25 11:53:19 1112

原创 HashTable/HashMap/ConcurrentHashMap

概述:     Hashtable 是散列表,存储的是键值对(key-value)的映射。Hashtable 继承与Dictionary,实现了Map、Cloneable、Serializable接口。它是线程安全的。Hashtable 中的映射不是有序的。     Hashtable 有四个构造函数,分别是:// 默认构造函数。public Hashtable

2017-06-20 23:09:52 441

原创 给EditText左右两边设置图片与监听(drawableLeft/drawableRight)/弹出键盘

设置图片:Drawable phoneDrawableLeft = getResources().getDrawable(R.mipmap.phone_login, null);phoneDrawableLeft.setBounds(0, 0, drawableDimension, drawableDimension);Drawable phoneDrawableR

2017-04-24 21:24:54 1747

原创 ListView原理概述

ListView的源码特别长,流程特别多,看完郭神的解析博客(http://blog.csdn.net/guolin_blog/article/details/44996879)还是一脸懵逼。这篇文章根据郭神的文章,尝试记录下ListView源码的总体思路。RecycleBin     首先ListView继承自AbsListView。AbsListView中有

2017-04-20 10:56:07 602

原创 进程同步与互斥

同步与互斥的概念     ①、间接相互制约关系(互斥):若某一进程要求使用某种资源,而该资源正被另一进程使用,并且该资源不允许两个进程同时使用,那么该进程只好等待已占有资源的进程释放资源后再使用。这种制约关系的基本形式是“进程-资源-进程”。          这种制约关系源于多个同种进程需要互斥地共享某种系统资源,互斥是设置在同种进程之间达到互斥地访问资源的谜底。    

2017-04-17 17:25:33 1548

原创 View的工作流程

概述       View的绘制流程是从ViewRoot的performTraversals开始的,经过measure、layout和draw三个过程才能最终将一个View绘制出来。MeasureSpec           View的measure过程在绘制的三个流程中是最复杂的。这里先看measure中关键的一个类——MeasureSpec。

2017-04-15 23:33:04 321

原创 JAVA运行时数据区域

JAVA运行时数据区域分为:①、方法区(Method Area);②、虚拟机栈(VM Stack);③、本地方法栈(Native Method Stack);④、堆(Heap);⑤、程序计数器(Program Counter Register);     其中,虚拟机栈、本地方法栈、程序计数器是线程隔离的数据区,方法去和堆是由所有线程共享的数据区。          ①、方法区:用于存

2017-04-12 20:22:53 633

原创 Bitmap加载与缓存相关

概述     Bitmap在Android中指的是一张图片,可以是各种常见的图片格式。可以使用BitmapFactory类来加载一个图片。BitmapFactory提供了四类方法:decodeFile、decodeResource、decodeStream和decodeByteArray,分别用于支持从文件系统、资源、输入流以及字节数组中加载出一个Bitmap对象。

2017-04-09 21:21:13 320

原创 强引用(Strong Reference)/软引用(Soft Reference)/弱引用(Weak Reference)/虚引用(Phantom Reference)

强引用:强引用指的是代码中普遍存在的,类似“Object obj = new Object()”这类的引用,只要强引用还在,垃圾回收器永远不会回收被引用的对象。     软引用:软引用是用来描述一些还有用但并非必要的对象。对于软引用关联着的对象,在系统将要发生内存溢出之前,将会把这些对象列入回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出的异常。JDK1.2之

2017-04-07 15:58:40 554

原创 Android中的AsyncTask解析

概述     AsyncTask是一个抽象的泛型类,它是一个轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和后台结果传递给主线程并在主线程中更新UI。AsyncTask封装了Thread和Handler。但是AsyncTask并不适合耗时的后台任务,对于耗时的后台任务建议使用线程池。它提供了Params、Progress和Result三个泛型参数。提供了四个核心方法

2017-03-28 23:23:14 463

原创 JAVA中线程相关知识

JAVA中的线程调度方式是抢占式调度。即每个线程将有系统分配执行时间,线程的切换不由线程本身来决定。在这种线程调度方式下,线程的执行时间是可控的,不会有一个一个线程阻塞导致整个进程阻塞的问题。在JAVA中,我们可以通过给线程设置优先级来“建议”系统给线程分配或多或少的执行时间。当两个线程都处于Ready状态时,优先级高的线程容易(并非绝对)被系统选择执行。     由于JAVA中的线程是通过映

2017-03-27 20:23:08 452

原创 JAVA输入输出流(IO)

流的概念     流是一个很抽象的概念,当程序需要读写数据时,就会开启一个通向数据源的流,这个数据源可以是文件、内存或者网络连接,在程序读写数据过程中,数据就像在“流”动一样。     由上图可知,流代表经过管道流通的数据。为了进行数据的输入和输出操作,JAVA把不同的输入和输出源(例如键盘、文件和网络连接等)抽象表述为流。     按流向不同,可以分为输入流和

2017-03-24 23:47:12 340

原创 接口与抽象类

abstract用于定义抽象类,抽象类不能实例化,抽象类中既可以包含已实现的方法,也可以包含方法定义,而不具体实现。     interface用于定义接口,接口只包含常量定义和方法定义。接口本身也是一种特殊的抽象类。     抽象类和接口的区别主要有一下几个方面:                   ①、定义格式不同://抽象类定义格式public abstract

2017-03-20 21:26:03 459

原创 Android的消息处理机制

简述     Android使用Handler主要原因是为了解决在子线程中无法访问UI线程的矛盾。因为UI线程是不安全的,如果多线程并发访问会导致UI控件处于不可预期的状态。系统不对UI控件上锁是为了避免UI访问的逻辑变复杂,同时也为了避免降低UI访问的效率。     Handler是Android消息机制的上层接口。Handler的运行需要依赖底层MessageQueue和Loo

2017-03-17 00:38:48 870

原创 建造者模式

当一个对象非常复杂,为了区分构建过程和使用过程,使用一个Director类进行对象的构建,Builder规定了这个构建过程。模式结构:     Builder:抽象建造者接口,规范各个组成部分的构建。     ConcreateBuilder:具体的建造者角色,实现组成部分的构建,并提供示例(getResult()方法)。     Product:产品角色,

2017-03-16 16:46:05 363

原创 String/StringBuilder/StringBuffer

String    JAVA中有字符串公共池,如果两个字符串具有相同的内容,它们将共享公共池内同一存储器。这样做是为了节省对经常使用的字符串存储。另一方面,通过new操作符和构造器创建的String对象,都存储在堆中,即是两个String的内容相同,它们也是相互独立的,没有共用存储。用equal()方法比较两个字符串的内容,用==比较两个变量的引用。     String中使用字符数组(c

2017-03-15 20:54:40 347

原创 HTTP相关

相关方法(方法名区分大小写)①、GET方法:获取资源     GET方法用来请求访问已被URI识别的资源。指定的资源经服务器端解析后返回响应内容。②、POST方法:传输实体主体     POST方法用来传输实体的主体。虽然用GET方法也可以传输实体的主体,但一般不用GET方法进行传输,而是用POST方法。虽说POST的功能和GET的很像,但P

2017-03-14 21:02:38 380

原创 Activity生命周期相关

Activity的子类中两个重要的方法     onCreate(Bundle): 初始化你的activity,使用setContentView(int) 来给activity设置UI,使用findViewById(int)来获取UI中的widgets。     onPause(): 当用户离开这个acitivty时,用户的所有改变(change)在这里应该被保存。

2017-03-14 21:01:26 437

原创 Recyclerview中checkbox的复用问题

在Recyclerview中,如果item中使用了checkbox之类的可以改变状态的控件,会出现控件的状态也被复用的情况。- 暴力的解决方法就是停用ViewHolder的复用:viewHolder.setRecyclable(false),不过会导致使用时卡顿严重。- 另一种方法是维护一个list,里面存放状态改变的item的position。在 onBindViewHolder方法中,

2016-11-14 17:34:14 1866

原创 关于View的测量

MeasureSpec类MeasureSpec类是一个32位的int值(使用位运算是为了提高并优化效率),高2位是测量模式,低30位是测量大小。测量模式:EXACTLY(精确模式): 当把View设置成match_parent时或设置具体的大小时,容器传入的即是EXACTLY模式AT_MOST(最大值模式): 源码可以看出:final boolean isWrapContentWidth =

2016-10-25 23:02:08 463

原创 百度地图开发中的一些问题

百度地图开发中的一些问题定位功能的实现: 1.创建LocationClient 2.implements BDLocationListener接口,重写onReceive方法 3.创建并注册listener 4.创建并设置LocationClientOptionLocationClientOption sample:option.setCoorType("bd09ll");option.s

2016-10-14 22:00:19 562

原创 Android开发机与模拟器相互访问

模拟器上访问开发机:10.0.2.2开发机上访问模拟器:-telnet localhost 5554-redir add tcp:8088:8088

2016-07-28 16:34:53 586

空空如也

空空如也

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

TA关注的人

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