源码分析
文章平均质量分 96
李可乐
资浅Android开发,正在越走越深。
展开
-
RecyclerView实现addHeadView的三种方法原理说明和利弊分析(footHead同理)
介绍上一篇博客我分析了ListView的源码看Google是怎么样实现addHeadView的,源码的思路是对绑定在ListView的Adapter做转换,在我们调用addHeadView的时候把已经写好的BaseAdapter转换成HeaderViewListAdapter这一组件,在代码内部调用BaseAdapter.getView方法。这样写的好处是解耦和不影响我们原有代码的前提下做好转换。这原创 2016-03-25 17:10:44 · 6893 阅读 · 0 评论 -
Android-怎样计算Bitmap的内存占用和Bitmap加载优化
介绍在Android开发中Bitmap肯定是绕不过去的,很多时候我们只是使用图片框架加载图片,具体细节的Bitmap对内存的使用图片框架已经帮我们封装好了。但是对Btimap对内存的影响我们还是需要了解的。内存占用首先要清楚Bitmap的文件大小肯定不是实际的内存加载大小。因为文件只是存储的信息,加载到内存中显示出来时还需要经过转换。获取运行的时的内存占用: 针对Bitmap...原创 2018-04-12 17:05:49 · 1695 阅读 · 0 评论 -
Android-怎样实现一个非阻塞的超时重试任务队列
起因最近接手一个项目,要把其中的阻塞任务队列,重构成非阻塞。在客户端很少有机会直接处理任务队列。项目完成需要总结经验。阻塞的发生我这里先说明我遇到的阻塞问题,我这里的阻塞不是多线程访问的阻塞,概念上是任务执行的阻塞。具体是:任务开始客户端准备数据,通过socket向服务器发送数据。阻塞等待服务器socket的ack回应。得到服务器的socket回应完成任务,取出队列的后续...原创 2018-04-11 15:23:36 · 2431 阅读 · 0 评论 -
Android开发-BottomSheet的使用和说明
Android开发-BottomSheetDialogFragment的使用和封装介绍在官方提供的android.support.design.widget包中,加入bottom sheet能够很方便的实现一些酷炫的功能。官方blog说明得比较简单,中文博客上也有一些介绍和说明 Android Bottom Sheet详解本文就是从这些博文中开始探索,最后总结一些使用经验和封装方便之后的使用。简单原创 2016-12-09 12:54:56 · 9986 阅读 · 4 评论 -
Android开发-从源码分析Fragment嵌套PagerAdapter生命周期,解决重建问题
介绍众所周知在Android开发中Fragment的生命周期非常复杂,复杂得甚至让Square公司提出了我为什么主张反对使用Android Fragment转而提倡使用自定义View组合替代Fragment。但是没办法公司项目还是使用了很多Fragment嵌套。遇到问题还是需要自己去处理的。这里以Fragment的状态保存和恢复(即重建)来讨论一些关于Fragment的生命周期问题。...原创 2017-07-06 00:51:06 · 3009 阅读 · 0 评论 -
Android开发-备忘录模式在Android的应用和模拟实验
介绍在上一篇设计模式-备忘录模式(Memento)的详解中,使用文字和示例代码解释了备忘录模式。对于备忘录模式的理解是本文基础。如果还不了解备忘录模式还请参考上一篇 首先我们都知道Android移动设备因为内存大小问题,会经常发生GC内存回收操作。关于GC内存回收的发生时机有多种,以后再详解。这里就举例一种常见情况,用户在某个Activity中按下Home键返回桌面,很长时间后通过“近期任务”列表原创 2017-07-05 16:48:23 · 1495 阅读 · 0 评论 -
设计模式-备忘录模式(Memento)的详解
介绍稍微了解一些java设计模式的都知道,设计模式中有一种备忘录模式,关于作用应该看名字就知道应该和状态保存有关。本文就从定义到示例代码到实际应用一步步说明详解。定义备忘录模式定义:在不破坏封装性的前提下,捕获对象的内部状态。 本质:保存和恢复内部状态 作用:在不暴露内部状态不破坏封装完整性的前提下,能够统一的得到内部状态,并且在恰当的时机恢复内部状态。内部状态在一个java类里面,不可避免的需原创 2017-07-04 18:25:17 · 896 阅读 · 0 评论 -
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 · 1105 阅读 · 0 评论 -
Android开发-状态栏着色原理和API版本兼容处理
介绍先上实际效果图,有三个版本请注意区分API版本 API>=20 API=19 API<19 以上的效果我们称之为对状态栏的着色,而非沉浸式状态栏,那是另外的东西。 想要实现以上的效果并不难,阅读本文了解原理后,就会觉得想要以上的效果真的很简单。 本文旨在总结我的理解告诉读者一步步实现状态栏着色的原理。原理第一步-设置透明状态栏对状态栏的控制一切基础都源于 s原创 2017-03-11 16:54:27 · 2849 阅读 · 1 评论 -
Android开发-事件分发机制实验分析ViewGroup、View事件分发,结合职责链模式
介绍上一篇博客职责链/责任链模式(Chain of Responsibility)分析理解和在Android的应用 介绍了职责链模式,作为理解View事件分发机制的基础。 套用职责链模式的结构分析,当我们的手指在屏幕上点击或者滑动,就是一个事件,每个显示在屏幕上的View或者ViewGroup就是职责对象,它们通过Android中视图层级组织关系,层层传递事件,直到有职责对象处理消耗事件,或者没原创 2016-06-01 18:01:20 · 5459 阅读 · 1 评论 -
设计模式-职责链/责任链模式(Chain of Responsibility)分析理解和在Android的应用
介绍我一直感觉Android源码不能只简单的看,结合设计模式的思想再去看源码会有更深的理解。但是源码中应用某个设计模式,会根据实际情况会有一些差异。所以需要先透彻地理解设计模式。熟悉设计模式的应用场景就可以在Android源码的场景中找到相应的实现,熟悉设计模式就能够透过浩瀚的源码看到本质。 今天突然想到有关View点击事件的分发,感觉它的设计需求就很符合职责链模式(Chain of Respon原创 2016-06-01 01:17:07 · 3310 阅读 · 0 评论 -
AutoCompleteTextView的使用和源码分析以及实现响应式输入提示功能
在我的项目中在使用AutoCompleteTextView用来为用户输入提示。提示内容是来自网络返回,效果如下 这篇博客记录我的分析和编码过程1.简单AutoCompleteTextView使用简单代码示例1:public class CountriesActivity extends Activity { protected void onCreate(Bundle icicle)原创 2016-03-21 19:15:03 · 1741 阅读 · 0 评论 -
设计模式-装饰者模式(Decorator)理解和在Android中的应用
介绍最近写代码没有手感,就看看书找点写代码的灵感。看点高大上的设计模式谈谈自己的理解。我读的是《研磨设计模式》看完之后真正的醍醐灌顶。借用一句话 一本值得反复研读的书 读了设计模式,其实我觉得看Android源码不是一行一行的看,毕竟源码的代码太多,其实很多都是输入检查非空判断异常处理等,如果只是关心的关键的实现步骤抓重点的话,就找到关键实现就好了。这话说得有点绕。我们怎么知道什么是重点。这就原创 2016-04-22 18:22:48 · 8475 阅读 · 2 评论 -
设计模式-享元模式(Flyweight)的分析说明和Android中的关键应用
介绍写博客总是需要动力和动机的,最近在看Android线程和进程的分析,其实就是Handler这个Android开发中最重要的东西。说来惭愧现在也只是会用的程度。本着要进步的心态我需要在这块下功夫研究。代码要一行一行的写,书要一本一本的看。 相信大家都写过这样的代码: Message message= handler.obtainMessage(); message.原创 2016-05-15 18:13:36 · 1203 阅读 · 0 评论 -
View的两种更新方法-从源码角度分析invalidate()和postInvalidate()的区别
介绍最近在看各种Android多线程开发的各种知识,网上看到有关线程和View的东西,其中View的两种更新方法invalidate()和postInvalidate()。记得当时在深圳去面试其中有个题目就是说明这两个的区别。今天突然又看到就需要把不懂得总结出来。分析invalidate首先不管这两个的使用问题,就从源码看。 先来到android.view.View这个最重要的类。Ctr+F搜索i原创 2016-05-24 01:15:25 · 3693 阅读 · 1 评论 -
源码分析-ListView组件addHeaderView()方法的源码解析
分析动力最近在写自己的项目,使用到RecyclerView这控件替代我之前常用的ListView。使用起来当然感觉比之前的ListView功能强大太多。但是目前RecyclerView却没有添加addHeadView()和addFooterView()这两个列表组件常用的功能。网络上有很多博客都有介绍他们的方法给RecyclerView添加这两个功能,主要就是在onCreateViewHolder和原创 2016-03-23 17:07:31 · 1700 阅读 · 0 评论 -
线程池运行机制分析-线程复用原理
介绍我们在涉及到多线程开发时,必然就涉及到线程池的使用,在阿里巴巴-Java开发手册中说到: 【强制】线程资源必须通过线程池提供,不允许在应用中自行显示创建线程 说明:使用线程池的好处是减少在创建和销毁线程上所花费的时间以及系统资源的开销,解决资源不足的问题,如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或“过度切换”问题。这里的规范很强势,直接定义为【强...原创 2018-05-29 11:49:40 · 3494 阅读 · 0 评论