自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

geekerhw的博客

不忘初心

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

原创 Android中的内存泄露

内存泄露是造成内存溢出的重要原因之一。Android的内存模型基于jvm的基本实现。底层依赖可达性算法来回收对象。JVM对每个对象状态的监控给我们带来了便利,虽然造成了一定程度上性能的损失。为了让大家能更明白内存泄露的本质,文章会从java的内存模型讲起,最终举出几个内存泄露的例子和解决方案。最重要的是,理解了原理,你将会举一反三,内存泄露将变得异常简单。java运行时内存模型...

2018-03-29 15:30:23 2263 1

原创 史上最全面,清晰的SharedPreferences解析

基础用法获取Sp:getput监听器原理分析获取SharedPreferences构造SharedPreferencesgetX原理分析putX原理分析创建editorputStringapplyapply总结commitSharedPreferences最佳实践勿存储过大value勿存储复杂数据不要乱edit和apply,尽量批量修改一次提交...

2018-03-27 14:52:00 7233 7

原创 引入多线程的代价

在现代计算机系统中,使用多线程和并发技术无疑是提升系统运行效率的重要手段之一,他可以最大化的利用cpu的空闲时间,提升系统的吞吐量和速率,但是,引入这些诱人的技术代价也是不容忽视的,比如上下文切换带来的额外开销,内存同步造成的损耗等等,如果这些诱人的技术带来的性能提升不足以掩盖他们的缺点时,我们的工程系统就需要立刻被重新设计,生于忧患死于安乐,因此,在知晓其好处之前我们更应该洞察其缺点上下文切换

2016-08-21 21:37:37 1062

原创 ListView缓存原理剖析

单类型View缓存机制多类型View缓存机制缓存原理剖析总结ListView缓存机制可以优化的地方单类型View缓存机制请看上图,字母前面的数字表示元素在屏幕上的position,字母代表着View的类型,例如1A就表示第一个位置并且类型为A的View当从状态一转变为状态2后,1A被滑出,5A被滑入,由于5A在被滑入之前缓存池中没有元素,所以5A将被创建,并且当1A滑出屏幕时将被投入到缓

2016-08-11 10:12:42 3013 5

原创 避免陷入过度设计的泥潭

功能上的过度设计程序上的过度设计如何解决TDD思考法测试驱动开发 注: 今天在知乎上看到了讲解过度设计的文章,觉得非常的有道理,自己去学习了这方面的知识,以下做一个总结学习了许多的设计模式之后,大部分人都会有滥用(或者设计不足)设计模式的经历,如何在其中找到一个balance,以下的文章就会给出一个解决方案,一种比较中和的思考方式,在此之前,我们先看一下我们经常会犯的几种错误功能上的过度

2016-07-24 21:29:23 4764 2

原创 编写可读代码的艺术

命名带上有效信息有效用词避免歧义约定俗成符合惯例注释类注释字段注释函数注释异常注释逻辑表达式的书写习惯循环表达式结构总结 编写可读代码,是基础中的基础,但又非常的重要,所以我把它放在了总结具体重构手段的开头,这个是必须要掌握的日常开发中,大多数情况下我们都是team开发,并且往往阅读>编码,所以你的一举一动和编码习惯都会影响到他人,作为团队,统一编码风格是基本要求,写出

2016-07-10 16:11:51 960

原创 Best Practice For Android

Best Practice For Android 阿里巴巴Android开发手册个人理解记录Android基本组件Activity间的数据通信:putExtra: 数据量小于 < 1024kb (IPC缓冲区大小限制)Huge Data: EventBusActivityResults.data(static)数据库 & SPActivity数...

2018-03-08 11:38:27 589

原创 非UI线程更新UI!?

Android中非UI线程也可以更新UI,记录一次完整的探查过程!

2016-08-22 01:09:23 2146 2

原创 EventBus源代码深度剖析

分析之前的思考registerthis时我们都干了什么 本分析基于的代码可以在这里clone到,强烈建议边看代码边浏览本文,本文章主要分析eventbus的核心思想,因为版本差异,有一些细节可能不太一样,但我建议各位不要陷入细节无法自拔,站在较高角度去吃透它的思想才是我们的目的,因此,一些基本概念已经有很多文章已经讲过,下文不再赘述分析之前的思考eventbus的

2016-08-03 08:57:02 1928

原创 观察者模式II--Java原生实现分析以及一种全新的观察者模式

分析传统观察者模式的不足以及JAVA原生观察者的缺陷,通过使用Map唯一的去确定每个观察者的身份,添加动态精确控制观察者行为的逻辑.

2016-07-29 17:35:17 1367 1

原创 适配器模式

什么是适配器模式类关系描述代码描述适配器模式的使用场景适配器模式的思考什么是适配器模式将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间 类关系描述 RealAction类是已经上线的类,客户用着它的realCall()方法实现了相应的需求,但是现在客户要求接口发生变化,Client那边现在需要实现Subject接口的类,但是需要的功能没有发生变化,意味

2016-07-24 20:46:41 604

原创 Part3:Volley传递者原理分析

问题产生创建传递者传递的过程一个比较重要的细节问题产生我们先看一下Volley的使用方法://第一步,创建一个RequestQueue队列RequestQueue mQueue = Volley.newRequestQueue(context); //第二步,创建一个具体类型的对象,这里是StringRequestStringRequest stringRequest = new

2016-07-23 01:27:44 591

原创 Part2:Volley请求失败的重试机制

Volley资源加载失败时的重试机制非常简单,放在Part2是因为不搞懂可能会影响后面的逻辑,所以简单看看代码,对着注释理解了即可 强调,看这一系列文章时手头一定要有完整的Volley源代码,可以对着理解,因为我写上的只是一部分RetryPolicy是一个接口,DefaultRetryPolicy是他的唯一实现类,重试机制启动的入口在BasicNetwork类中(进行网络操作的类),它会判断各种

2016-07-22 16:35:46 1638

原创 Part1:Volley磁盘缓存

CacheDispatcherCacheEntry和DiskBasedCacheCacheHeaderDiskBasedCacheCountingInputStream缓存的核心DiskBasedCache初始化逻辑initialize函数pruneIfNeededget和putelse思考LRU算法一定合理吗如何增大缓存的命中率文件名重复问题首先研究一下Volley的磁盘缓存

2016-07-21 13:58:02 4185 4

原创 观察者模式I

什么是观察者模式代码描述观察者模式给我们的思考之外的想法什么是观察者模式?观察者模式定义了对象之间一(主题对象)对多(观察者)的一种依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新 我们认识观察者模式可以通过报社这个经典的例子:报社的业务是出版报纸向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来,只要你是他们的订户,你就会一直收到新报纸当你不想再看报纸的时候,取

2016-07-19 21:03:33 1313

原创 Part0:Volley源代码分析概述

简介Volley是什么Volley的特点我们会怎么做Volley总体架构总体设计图类关系图核心功能流程图简介Volley是什么?Volley是Google官方推出的一款网络请求和图片加载框架,于Google I/O 2013大会发布. 从上图中可以看出,Volley非常适合那些通信频繁,但每次通信数据量不大的场景,这正是大多数Android通信场景的写照.Volley的特点可扩展

2016-07-17 17:11:48 547

原创 Part2:重新组织函数

介绍提炼函数用函数取代产生临时变量的语句引入解释性变量使临时变量也遵循单一职责介绍过长函数是造成代码混乱的重要原因之一将一个过长函数分解为多个小函数,每个函数都有自己的单一职责,并且使它们的名字具有自解释的功能(关键)简短而命名良好的函数粒度很小,复用机会很大会使高层函数读起来(调用这些小函数的地方)就像注释,前提是在命名上下点功夫,事实上也必须这样做在重新组织函数中可能会遇见一些

2016-07-15 16:26:51 721

原创 Part0:认识重构

什么是重构为什么要重构什么时候应该重构总结什么是重构 Refactoring是这样的一个持续的过程,在不改变代码外在行为的前提之下,对代码做出修改,以改善其内部结构. 改善其内部结构的含义是提高代码的健壮性,可扩展性,可维护性,增强代码的可读性,我们日常工作一般有两件事,完成新功能开发 & 解决bug,改善其内部结构可以帮助我们更迅速,高效的完成这两件事,降低我们开发的成本,加快我们开

2016-07-10 10:37:17 1070

原创 APK瘦身方案

去除减少无用资源文件库引用的图片资源优化引用的音频资源优化Provided关键字Proguard深度混淆代码微信资源打包全版本兼容的瘦身方案插件化技术去除&减少无用资源,文件,库buildTypes中开启minifyEnabled = true和shrinkResources = true去除无用资源和代码去除没有用到的库和相应的so文件在满足需求的情况下,将大型,重量级的库替换

2016-06-30 23:25:19 915

原创 1.Activity正常和异常情况下的生命周期分析

一:典型情况下的生命周期分析1.先上一个非常经典的图: 不同于其他编程范式(程序从main()方法开始启动),Android系统根据生命周期的不同阶段唤起对应的回调函数来执行代码。系统存在启动与销毁一个activity的一套有序的回调函数。下面就简要分析一下各个过程的回调函数。 (1)onCreate方法,Activity被启动时的第一个方法,表示Activity正在被创建,在这个方法中一般

2015-09-26 10:36:35 16868 4

原创 Android:ApplicationContext远非Context

辨析ApplicationContext和Context的不同。

2015-09-16 21:26:53 1512

转载 Java中标识接口的作用

原文地址:http://blog.sina.com.cn/s/blog_6f6a95180100q0tv.html标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。标接口在Java语言中有一些很著名的应用,比如java.io.Serializable和java.rmi.Remote等接口便是标识接口。标识接口,当一个类

2015-08-19 22:42:33 2437

原创 Java中的protected,或许并不是我们想的那样

总结了使用Java中protected的误区

2015-08-19 22:07:49 2510

原创 Java内部类大解析

本文主要详细总结了Java中常用的内部类,成员内部类,静态内部类,方法内部类,匿名内部类,并重点讲述了匿名内部类的三种写法,稍微分析了匿名内部类的优点和缺点,讲述了各种内部类的基本语法和数据访问方式等。

2015-08-19 11:06:51 912

转载 Java中各种修饰符与访问修饰符的说明

JAVA中的类只能是public 或者package的。这是符合逻辑的:人们定义类的初衷就是为了让别人用的。倘若是private,别人怎么调用?但是有一个内部类可以被定义为private。严格上说,内部类,算不得上是一种光明正大的类,内部类在某种意义上是类这个王国里的特务和地下工作者。特务和地下工作者为王国起了不少作用,但是几乎从来不敢在公众场合抛投露面。就算要露面,也要在主人(class)的同意

2015-08-19 09:13:46 3536

转载 一个经典例子让你彻彻底底理解java回调机制

转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过

2015-08-12 17:36:13 918

原创 浅析Android Context

解释了Context的基本含义,Context的继承关系,Context生成的时机以及在应用程序中的个数,辨析了Acticity的Context与Application的Context的不同,它们二者的应用场景,浅析了关于使用Activity的Context引起的内存泄露问题等。

2015-08-08 13:51:10 1033

原创 Activity技巧三重奏之三:启动活动的最佳写法

说明:以下知识点总结自郭霖的《第一行代码》背景: 有时候你写的A活动必须跳转到B活动,而B活动恰恰不是你写的,并且B活动的启动必须依赖于你(A)传递过来的参数,并且这个参数在你没有看B的源代码时你很可能是不知道传什么的,为了避免这种情况的发生,在一个活动中最好写一个下面这样的函数,用于启动activity.A.java 作用: 活动A,用于启动活动B(只列出了主要程序,一点bt

2015-08-02 01:12:28 1089

原创 Activity技巧三重奏之二:随时随地的退出程序

说明:被知识点总结自郭霖的《第一行代码》背景: 假设有如下场景,一个应用程序中,用户从Activity A进入了Activity B,又从Activity B进入了Activity C,又从Activity C进入了Activity D,现在用户想退出,必须按4下back键,这极大的影响了用户的体验,这时就需要一个能随时随地退休注销的解决方案。解决方案: 创建一个活动管理器类Ac

2015-08-02 00:54:44 621

原创 Activity技巧三重奏之一:知晓当前是在哪一个活动

说明:本知识点总结自郭霖的《第一行代码》 背景: 当程序界面众多时,根据界面就非常不好判断究竟是哪一个Activity,尤其是在看别人的代码时,会非常头痛,下面的解决方案也许会给您一些启发.首先,编写一个BaseActivity类。package com.example.hhhhwei.testintent;import android.app.Activity;import andr

2015-08-02 00:38:34 593

原创 浅析JAVA注解

1.Java注解是什么?    注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。(引用自百度百科)2.注解有什么作用,为什么需要注解?    注解的作用大致分为三类:    a.编写文档:通过代码里标识的元

2015-07-29 15:44:22 1131

原创 JAVA中泛型的本质

以下的内容需要一点点JAVA反射的知识,建议各位小伙伴可以先看一下我的浅析JAVA反射机制(如果实在不想看的话看懂下面的内容应该也不会有大问题,可能会有一点理解困难)。 我们先来看一个程序:AyyayList<String> a = new ArrayList<String>();a.add("hh");a.add(20);显而易见,a.add(20)是一个错误的操作,由此引出泛型的基本作用就

2015-07-29 02:01:59 1374

原创 JAVA动态加载类和静态加载类

1.JAVA动态加载类和静态加载类的区别    new创建对象的方式称作为静态加载,而使用Class.forName("XXX")称作为动态加载,它们俩本质的区别在于静态加载的类的源程序在编译时期加载(必须存在),而动态加载的类在编译时期可以缺席(源程序不必存在)。2.为什么需要动态加载类   对于我自己的理解,动态加载类增加了程序的灵活性。比如一个程序中有50个功能,但你可能

2015-07-28 17:21:54 9748 3

原创 浅谈JAVA中反射机制

在学习java中的反射机制之前,我们必须先了解两个问题(小伙伴们现在不能完全明白没关系,后面我会一个一个详细的和大家分享我的理解).1.什么是反射?    Reflection,翻译为映像,反射。JAVA反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语

2015-07-28 15:40:35 1145

原创 浅谈JAVA中包装器类型

1. 为什么需要包装器类型 首先我们先来看一个表格。 以上是java中七种的基本类型以及对应的包装器对象类型,为什么java非要给七种基本类型构造出相应的包装器类型呢,这里有个重要的原因: 将基本类型包装成对象以后,扩大了基本类型所具有的操作(后面将举例说明),更是JAVA面向对象的体现2.基本类型扩展为包装器类型后的常用操作

2015-07-28 00:08:31 4732

转载 深入剖析Java中的装箱和拆箱

深入剖析Java中的装箱和拆箱  自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。  以下是本文的目录大纲:  一.什么是装箱?什么是拆箱?  二.装箱和拆箱是如何实现的  三.面试中相关的问题  若有不正之处,请谅解和批评指正,不胜感激。  请尊重作者劳动成果,

2015-07-27 10:33:10 568

原创 MAC下Android Studio的安装

对于我们初学者来说,搭建安卓开发环境是我们学习安卓的第一大拦路虎,这里我就详细讲一下Android Studio的安装过程,希望能帮助到遇到问题的朋友。1.Android Studio的下载 首先访问developer.android.com,强烈建议永远记住这个网站,在国内可能因为某些原因访问速度受限,推荐一个google chorme上的红杏插件,能很好的访问一些国外的网站。然后点击最上

2015-07-26 16:40:59 514

空空如也

空空如也

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

TA关注的人

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