自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李可乐的专栏

分享开发经验

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

原创 Android-怎样实现一个非阻塞的超时重试任务队列

起因最近接手一个项目,要把其中的阻塞任务队列,重构成非阻塞。在客户端很少有机会直接处理任务队列。项目完成需要总结经验。阻塞的发生我这里先说明我遇到的阻塞问题,我这里的阻塞不是多线程访问的阻塞,概念上是任务执行的阻塞。具体是:任务开始客户端准备数据,通过socket向服务器发送数据。阻塞等待服务器socket的ack回应。得到服务器的socket回应完成任务,取出队列的后续...

2018-04-11 15:23:36 2393

原创 Android开发-从源码分析Fragment嵌套PagerAdapter生命周期,解决重建问题

介绍众所周知在Android开发中Fragment的生命周期非常复杂,复杂得甚至让Square公司提出了我为什么主张反对使用Android Fragment转而提倡使用自定义View组合替代Fragment。但是没办法公司项目还是使用了很多Fragment嵌套。遇到问题还是需要自己去处理的。这里以Fragment的状态保存和恢复(即重建)来讨论一些关于Fragment的生命周期问题。...

2017-07-06 00:51:06 2896

原创 MVP架构-Android官方MVP项目和响应式MVP-RxJava项目架构分析对比解读

介绍MVP这个架构一直是Android开发社区讨论的焦点,每个人都有自己的分析理解众说纷纭。直到GitHub上Google官方发布用MVP架构搭建的项目。感觉是时候分析了。MVP架构简介这不是本文重点,所以摘抄自李江东的博文MVP架构简介  对于一个应用而言我们需要对它抽象出各个层面,而在MVP架构中它将UI界面和数据进行隔离,所以我们的应用也就分为三个层次。View:对于View层也是视图层,在

2016-05-27 17:45:11 16661 5

原创 线程池运行机制分析-线程复用原理

介绍我们在涉及到多线程开发时,必然就涉及到线程池的使用,在阿里巴巴-Java开发手册中说到: 【强制】线程资源必须通过线程池提供,不允许在应用中自行显示创建线程 说明:使用线程池的好处是减少在创建和销毁线程上所花费的时间以及系统资源的开销,解决资源不足的问题,如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或“过度切换”问题。这里的规范很强势,直接定义为【强...

2018-05-29 11:49:40 3470

原创 ReverseSuper:优雅的重构,一键生成动态代码,支持生成接口/抽象类

ReverseSuper引用 implementation 'com.licola:reversesuper-annotation:1.0.0'//注解库 annotationProcessor 'com.licola:reversesuper-compiler:1.0.0'//代码生成工具库使用/** * Created by LiCola on 20...

2018-04-16 15:12:13 754

原创 Android-怎样计算Bitmap的内存占用和Bitmap加载优化

介绍在Android开发中Bitmap肯定是绕不过去的,很多时候我们只是使用图片框架加载图片,具体细节的Bitmap对内存的使用图片框架已经帮我们封装好了。但是对Btimap对内存的影响我们还是需要了解的。内存占用首先要清楚Bitmap的文件大小肯定不是实际的内存加载大小。因为文件只是存储的信息,加载到内存中显示出来时还需要经过转换。获取运行的时的内存占用: 针对Bitmap...

2018-04-12 17:05:49 1644

原创 VirtualData-快速生成虚拟数据辅助开发

VirtualData 引用 implementation 'com.licola:virtual:1.0.2'主要目的是辅助开发阶段的测试,不建议在发布版引用,所以一般应该这样配置 testImplementation 'com.licola:virtual:1.0.2'使用CollectionUserModel models = Virtu...

2018-03-15 18:05:50 1005

原创 Android开发-备忘录模式在Android的应用和模拟实验

介绍在上一篇设计模式-备忘录模式(Memento)的详解中,使用文字和示例代码解释了备忘录模式。对于备忘录模式的理解是本文基础。如果还不了解备忘录模式还请参考上一篇 首先我们都知道Android移动设备因为内存大小问题,会经常发生GC内存回收操作。关于GC内存回收的发生时机有多种,以后再详解。这里就举例一种常见情况,用户在某个Activity中按下Home键返回桌面,很长时间后通过“近期任务”列表

2017-07-05 16:48:23 1456

原创 设计模式-备忘录模式(Memento)的详解

介绍稍微了解一些java设计模式的都知道,设计模式中有一种备忘录模式,关于作用应该看名字就知道应该和状态保存有关。本文就从定义到示例代码到实际应用一步步说明详解。定义备忘录模式定义:在不破坏封装性的前提下,捕获对象的内部状态。 本质:保存和恢复内部状态 作用:在不暴露内部状态不破坏封装完整性的前提下,能够统一的得到内部状态,并且在恰当的时机恢复内部状态。内部状态在一个java类里面,不可避免的需

2017-07-04 18:25:17 843

原创 Android开发者-对Java和编程的一点总结

介绍Java基础是每个Android程序员必备的,因为语法糖和封装以及编译器优化的存在我们可以不用关心一些细节的实现,但是一旦发生bug或者代码的优化,Java的细节基础就很关键。本文来自日常开发和随时随地的coding灵感不时更新。前提本文代码基于Win64位版本Java8,使用intellij idea开发工具,并添加环境变量。java version "1.8.0_101"Java(TM)

2017-05-16 19:02:42 1080

原创 Android开发-状态栏着色原理和API版本兼容处理

介绍先上实际效果图,有三个版本请注意区分API版本 API>=20 API=19 API<19 以上的效果我们称之为对状态栏的着色,而非沉浸式状态栏,那是另外的东西。 想要实现以上的效果并不难,阅读本文了解原理后,就会觉得想要以上的效果真的很简单。 本文旨在总结我的理解告诉读者一步步实现状态栏着色的原理。原理第一步-设置透明状态栏对状态栏的控制一切基础都源于 s

2017-03-11 16:54:27 2799 1

原创 Android开发-BottomSheet的使用和说明

Android开发-BottomSheetDialogFragment的使用和封装介绍在官方提供的android.support.design.widget包中,加入bottom sheet能够很方便的实现一些酷炫的功能。官方blog说明得比较简单,中文博客上也有一些介绍和说明 Android Bottom Sheet详解本文就是从这些博文中开始探索,最后总结一些使用经验和封装方便之后的使用。简单

2016-12-09 12:54:56 9773 4

原创 Android开发-优雅的实现动态图片排版(类似微信图片展示效果)

介绍效果展示 说明上面的图片排版 - 实现了动态布局,针对不同图片的数量展示不同的排版布局。效果类似微信朋友圈的图片排版,效果略有不同。 - 正方形的图片控件,高度会随着宽度一起变化。实现这样的布局有很多种思路,只是什么样的方式更优雅。本文提供一种相对优雅的方式供大家参考。思路首先,优雅的方式肯定不是定义多种的布局,然后根据图片数量,判断显示那种布局。这样的代码不优雅。其次,也没有必

2016-11-04 00:42:46 13025 3

原创 Android开发-事件分发机制实验分析ViewGroup、View事件分发,结合职责链模式

介绍上一篇博客职责链/责任链模式(Chain of Responsibility)分析理解和在Android的应用 介绍了职责链模式,作为理解View事件分发机制的基础。 套用职责链模式的结构分析,当我们的手指在屏幕上点击或者滑动,就是一个事件,每个显示在屏幕上的View或者ViewGroup就是职责对象,它们通过Android中视图层级组织关系,层层传递事件,直到有职责对象处理消耗事件,或者没

2016-06-01 18:01:20 5302 1

原创 设计模式-职责链/责任链模式(Chain of Responsibility)分析理解和在Android的应用

介绍我一直感觉Android源码不能只简单的看,结合设计模式的思想再去看源码会有更深的理解。但是源码中应用某个设计模式,会根据实际情况会有一些差异。所以需要先透彻地理解设计模式。熟悉设计模式的应用场景就可以在Android源码的场景中找到相应的实现,熟悉设计模式就能够透过浩瀚的源码看到本质。 今天突然想到有关View点击事件的分发,感觉它的设计需求就很符合职责链模式(Chain of Respon

2016-06-01 01:17:07 3263

转载 Android官方说明-Activity任务栈

任务和返回栈本文内容保存 Activity 状态管理任务定义启动模式处理关联清理返回栈启动任务文章Android 多任务运行机制另请参阅Android 设计:导航 清单文件元素概览屏幕应用通常包含多个Activity。每个 Activity 均应围绕用户可以执行的特定操作设计,并且能够启动其他

2016-05-30 23:35:48 2652

原创 Java语言一些记录

介绍这篇博文用来记录我平常想到的有关Java有趣或者重要的东西有序集合打乱我做过一道面试题,Java语言设计一个扑克牌游戏,发牌,洗牌。 我写Android客户端代码,数据集合一般都是服务器已经处理好了的。还从来没想过怎么把有序的集合打乱。 当时脑子里面就想到for循环里,一个Random随机对象生成随机数。然后就懵逼了。 今天突然想到这个问题就看了一下有关Java集合的源码。 首先这样的代

2016-05-29 00:42:27 853

原创 Android开发-Handler引起的内存泄漏-实验、分析、总结。

介绍最近在恶补Handler的知识,其中就涉及到了Handler引起的内存泄露问题,网络上有很多的分析文章。我就按照这些文章的思路,写代码验证,主要是验证和记录。 使用的内存检测工具是:LeakCanary 中文使用说明 英文原文: http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.h

2016-05-24 20:39:46 4393 9

原创 View的两种更新方法-从源码角度分析invalidate()和postInvalidate()的区别

介绍最近在看各种Android多线程开发的各种知识,网上看到有关线程和View的东西,其中View的两种更新方法invalidate()和postInvalidate()。记得当时在深圳去面试其中有个题目就是说明这两个的区别。今天突然又看到就需要把不懂得总结出来。分析invalidate首先不管这两个的使用问题,就从源码看。 先来到android.view.View这个最重要的类。Ctr+F搜索i

2016-05-24 01:15:25 3651 1

原创 Android内存泄露检测工具和实际开发中遇到的内存泄露问题解析

介绍内存泄露是平常开发中经常遇到的,有些时候稍不注意就会发生,而且还不易察觉,这就需要工具来帮助检测。本文主要介绍内存检测工具和我在开发中遇到的内存泄露问题和解决方案。内存泄露的原理具体的原理涉及到虚拟机垃圾回收机制知识,这里只为下文作介绍说明基本原理。想深度了解的请google。 内存泄露是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存

2016-05-23 17:41:18 3862

原创 Android开发-数据存储SharedPreferences工具类、Set<String>保存问题、源码分析

介绍SharedPreferences作为Android提供给我们方便简单的存储数据的类。它内部的实现实际上是xml格式的文件存储数据,同时为了提升读写性能同时实现了内存缓存机制。关键源码在android.app包中的SharedPreferencesImpl类里面。值得一提的是Context实例的getSharedPreferences是抽象方法,看不到实现。因为整个Context套件被设计成装饰

2016-05-20 22:15:42 4909

原创 Logger-功能强大使用方便的Log日志打印工具类

介绍Android开发中Log日志打印对开发者来说是非常重要的功能。但是感觉Log写多了也是烦,每次都需要设置一个TAG过滤值和具体的打印信息,而且打印的信息也不够丰富。 这里我推荐一个功能强大的Log日志打印工具类-Logger。(不是java.util.logging.Logger,只是恰好同名而已)使用使用非常简单,直接调用静态类方法。提供Debug/Info/Error三个级别的打印方法。

2016-05-17 19:41:39 5415

原创 设计模式-享元模式(Flyweight)的分析说明和Android中的关键应用

介绍写博客总是需要动力和动机的,最近在看Android线程和进程的分析,其实就是Handler这个Android开发中最重要的东西。说来惭愧现在也只是会用的程度。本着要进步的心态我需要在这块下功夫研究。代码要一行一行的写,书要一本一本的看。 相信大家都写过这样的代码: Message message= handler.obtainMessage(); message.

2016-05-15 18:13:36 1177

原创 设计模式-单例模式(Singleton)在Android中的应用场景和实际使用遇到的问题

介绍在上篇博客中详细说明了各种单例的写法和问题。这篇主要介绍单例在Android开发中的各种应用场景以及和静态类方法的对比考虑,举实际例子说明。单例的思考写了这么多单例,都快忘记我们到底为什么需要单例,复习单例的本质 单例的本质:控制实例的数量全局有且只有一个对象,并能够全局访问得到。控制实例数量有时候会思考如果我们需要控制实例的数量不是只有一个,而是2、3、4或者任意多个呢?我们怎样控制实例

2016-05-08 19:25:21 12908 7

原创 设计模式-单例模式(Singleton)各种写法和分析比较

介绍单例模式是设计模式中比较简单容易理解的。它的出现主要是: 保证一个类仅有一个实例,并提供一个访问它的全局访问点其实就在系统运行期间中保证只有这么一个实例,并能够全局访问。应用场景就是当需要一个对象时,这个对象需要整个系统运行期间只有一个,并且这个对象的新建开销比较大,为了避免频繁的新建对象浪费内存。就使用单例模式。代码实现单例模式有比较经典的两种写法。前段时间我去面试的有家公司面试题就有一

2016-05-07 23:51:18 5184 1

原创 设计模式-装饰者模式(Decorator)理解和在Android中的应用

介绍最近写代码没有手感,就看看书找点写代码的灵感。看点高大上的设计模式谈谈自己的理解。我读的是《研磨设计模式》看完之后真正的醍醐灌顶。借用一句话 一本值得反复研读的书 读了设计模式,其实我觉得看Android源码不是一行一行的看,毕竟源码的代码太多,其实很多都是输入检查非空判断异常处理等,如果只是关心的关键的实现步骤抓重点的话,就找到关键实现就好了。这话说得有点绕。我们怎么知道什么是重点。这就

2016-04-22 18:22:48 8385 2

原创 RxJava操作符的一些记录

介绍在项目中使用RxJava实现响应式编码有一段时间,RxJava的强大,简单的使用已经能够满足普通的开发需求,为了记录和加深自己的对RxJava的理解,写这篇博客记录一些自己对RxJava的使用和理解。前期说明下文用代码说明一些操作符的功能和使用。 首先提供基本的可观察对象,以下是基本的对象,后文中会根据需要进行修改。为了简化代码使用lamdba表达式。static Observable<Str

2016-04-20 18:35:21 801

原创 RxAndroid项目实践-使用RxJava响应式编码实现知乎日报的欢迎界面

介绍在我的项目中,使用RxAndroid和RxJava搭建项目。在刚开始是很痛苦的,每个操作符和方法都不熟悉。现在项目完成过半,对RxAndroid开始有些熟悉。就从一个实际功能开发入手,总结我对RxAndroid的理解。效果演示 说明: - 从用户角度:是一张华丽丽图片的放大,然后进入主页,很好的用户体验。(参考自:知乎日报) - 从App的角度:异步属性动画Animator的

2016-04-10 20:50:48 4903

原创 RxAndroid和Retrofit结合使用-网络调用和生命周期分析

说明这是我在项目使用RxAndroid、RxJava和Retrofit时的一些记录和分析。记录1:网络操作相关在使用RxAndroid和Retrofit进行网络操作时,有如下这些代码代码: getMyFollowingBoard(mTokenType, mTokenAccess, mIndex, mLimit) .doOnUnsubscribe(new Action0

2016-04-06 19:18:28 5432

转载 Android官方说明--返回键和toolbar向上按钮的区别

使用返回和向上导航实现有效导航一致的导航操作是整体用户体验的重要组成部分。如果基本的导航方法都不能保持一致,甚至让用户意想不到的话,恐怕没有比这更让人沮丧的事情了。 Android 3.0对全局导航行为做出了重大改变。 对用户来说,认真遵照“返回”和“向上”的指导准则可让应用的导航更可靠、更符合预期。Android 2.3 及更早的版本使用系统返

2016-04-01 19:59:37 7030

原创 JSON的使用、利用正则表达式解决不定类型返回Json格式

介绍作为移动端开发者,和服务器的通信是少不了了。下面我总结一我在开发中遇到有关json的问题一般Json在我刚入门的时候,在公司的写代码当时的网络返回也不复杂,10个字段以内,基本上熟悉Json的固定格式,手动写Bean接收数据,只要用心字段名称和类型对应就不会出问题。 推荐的Json格式校验网站,http://json.parser.online.fr/ 问题:就是如果字段复杂,就要花很多时

2016-03-31 15:02:09 7429

原创 RecyclerView实现addHeadView的三种方法原理说明和利弊分析(footHead同理)

介绍上一篇博客我分析了ListView的源码看Google是怎么样实现addHeadView的,源码的思路是对绑定在ListView的Adapter做转换,在我们调用addHeadView的时候把已经写好的BaseAdapter转换成HeaderViewListAdapter这一组件,在代码内部调用BaseAdapter.getView方法。这样写的好处是解耦和不影响我们原有代码的前提下做好转换。这

2016-03-25 17:10:44 6813

原创 Fresco的封装和使用说明以及获取缓存中的Bitmap对象

Fresco介绍Fresco是facebook开源的图片加载框架。 关于 Fresco Fresco 是一个强大的图片加载组件。 Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。 Fresco 中设计有一个叫做 Drawees

2016-03-23 17:51:31 13199 4

原创 源码分析-ListView组件addHeaderView()方法的源码解析

分析动力最近在写自己的项目,使用到RecyclerView这控件替代我之前常用的ListView。使用起来当然感觉比之前的ListView功能强大太多。但是目前RecyclerView却没有添加addHeadView()和addFooterView()这两个列表组件常用的功能。网络上有很多博客都有介绍他们的方法给RecyclerView添加这两个功能,主要就是在onCreateViewHolder和

2016-03-23 17:07:31 1665

原创 AutoCompleteTextView的使用和源码分析以及实现响应式输入提示功能

在我的项目中在使用AutoCompleteTextView用来为用户输入提示。提示内容是来自网络返回,效果如下 这篇博客记录我的分析和编码过程1.简单AutoCompleteTextView使用简单代码示例1:public class CountriesActivity extends Activity { protected void onCreate(Bundle icicle)

2016-03-21 19:15:03 1715

原创 面试题目总结

前几天刚从深圳回到学校,在深圳面试了几家公司,做了不少笔试题,感觉自己基础太弱,虽然在上家公司做了一年,但是工作太久都忘了基础。辞掉工作回学校好好准备面试,一定重回深圳。 总结一下面试题,当时没有记录,现在脑子想到什么就写什么,这篇博客慢慢完善。 题目如下题目:1000个数,[0,999]有两个数重复,设计程序找出来。题目:约瑟夫环,N个人数序号[1,N-1]到M就踢出: 问题有两种,1.求

2016-03-15 15:46:32 748

原创 个人项目-Material-Design版花瓣网图片App

介绍作为一个花瓣网用户实在受不了Android版的崩溃而且已经一年多没有更新。工作之余网络抓包和反编译,要自己写一个App,因为毕竟是别人的项目也不指望能上架,就直接开源放到github上,如果侵权请联系我及时删除。源代码放在GitHub:项目地址下面介绍目前的工作内容UI既然说是Material-Design版,肯定界面效果要足够MD,眼见为实。 主界面:瀑布流、下拉自动加载、浮动按钮、

2016-03-15 12:51:49 2375

转载 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2015-12-01 13:14:47 547

原创 android环境的搭建

JAVA环境搭建 1.      下载 IDEA 、java SDK、android SDK(注意android SDK同与你的win版本32/64位)2.      安装 IDEA安装 java SDK3.      解压 android SDK的压缩包4.      打开 IDEA,点击new projec。根据提示选择创建APP工程,其中的3选择你的解压的android

2014-11-26 13:23:24 779

空空如也

空空如也

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

TA关注的人

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