Android
文章平均质量分 71
Colin_Mindset
你关注到了我,是个概率极低的事件......
展开
-
【Android okhttp源码解析 五】拦截器流程和源码解析
拦截器是okhttp中非常重要的概念,我们来看下okhttp官网是如何描述其拦截器功能的。 它可以实现网络监听、请求以及相应重写、请求失败重试等功能。我们来看看拦截器是如何工作的。1. 还记得getReponseWithInterceptorChain()方法吗?我来看下其内部实现。 我们把原始请求originalRequest交给拦截器链chain,这个拦截器链就添加...原创 2018-03-30 11:31:59 · 520 阅读 · 0 评论 -
【Android 动画】仿淘宝加入购物车动画实现(附件demo)
在开发详情页时,我们需要实现这样一个下面这样的动画。在看到这个动画设计的时候,我就想到“京东”和“淘宝”的加入购物车的动画。 话不多说,讲一下这个动画的实现原理:1、获取“对比”按钮和“比+1”按钮的绝对位置2、在ScrollView滑动过程中,这两个按钮的位置会不断变化,所以需要不断更新两个按钮的位置 scrollView.setOnScrollChange...原创 2017-10-31 15:11:58 · 2275 阅读 · 0 评论 -
【Android 源码解析】从源码角度深入理解Android中Dialog、PopUpWindow、Toast区别
在开发完这一期的项目之后,终于有点时间来总结下了~ 这两个月我主要在做一个产品详情页改造的需求,里面有这样一个需求:当业务加载完成之后,需要弹出一个toast,这个toast能显示出有多少人已经预定过该产品。具体UI显示如下所示:看到这个需求,我脑海里立刻就复现了一个问题,“这个需求用自定义toast,自定义popupwindow,自定义dialog不是都能实现吗?这三者有什么区别呢?...原创 2017-12-12 14:41:00 · 2452 阅读 · 0 评论 -
【Android 自定义View】封装好的轮播图组件,可直接使用(附demo)
如果项目急用,可直接下载demo!非常容易使用!轮播组件都已经封装好!点我下载一、背景在做Android产品详情页的时候,我也造了一次轮子——把轮播图自己实现了一遍。经过产品经理的一次又一次的改版要求,我认为这个轮播的实现还是不错的。在完成需求的同时,我也规避掉了潜在的危险,比如内存泄漏问题。其实,一个简单的轮播图,要想真正应用到实际上线项目中,还是有很多细节值得仔细斟酌的,并且轮播流...原创 2017-12-12 17:06:38 · 1876 阅读 · 0 评论 -
【Android 控件】垂直滚动广告栏控件实现(跑马灯效果)
跑马灯TextView是每个学过android开发的人在入门阶段都会去自己实现一遍的。然而,在实际应用当中,要在跑马灯中展示的不仅仅是一行文字,常常是一幅幅图片,甚至是图文混排的广告。这种场景下,集成了跑马灯效果的TextView肯定就不能满足我们的需求了。经过一番调研,我找到了一种能非常好实现垂直滚动广告栏的控件——ViewFlipper。先看下实现效果。具体实现起来,代码也...原创 2017-12-12 21:20:16 · 1283 阅读 · 0 评论 -
【Android 技术难点攻克】RecyclerView实现悬停导航栏
介绍在上一篇文章《彻底解决RecyclerView与ScrollView滑动冲突问题,并实现RecyclerView悬停导航栏》中,我讲述了如何解决ScrollView与RecyclerView的滑动冲突问题。时隔几个月,我对这样的程序结构有很多的反思。当初这样嵌套,其实最主要是为了实现悬停。那么悬停的最好的实现方式就是这样去解决滑动冲突吗?答案或许是否。当然,几个月前,我设计出Scr...原创 2017-12-14 20:27:22 · 6714 阅读 · 2 评论 -
【Android 技术难点突破】要想实现图文混排时,你会怎么做?来来来,看Colin怎么做
为什么要研究图文混排呢?因为在新一期的需求中,有这样一个需求:希望在产品大标题后面追加“钻级标识”,并且在“游学产品”的大标题后面追加“金牌银牌登记标识”。具体效果可以看下面的截图。 如图,要实现这样的效果,你第一反应是采取什么样的方案呢?我这边脑海里首先想到的就是自定义View了,想到要把TextView和ImageView杂糅到一起,我这就很恼火。1.在经过仔细研究后...原创 2017-12-18 21:45:03 · 475 阅读 · 0 评论 -
【Android 前沿技术】用MediaPlayer+TextureView封装好的视频播放器,可直接使用(附demo)
一、引言在经过将近半个月的调研开发,我终于算是对“Android短视频开发”入门了。为了给自己一个总结,也为了把自己潜心研究的成果分享出来,我决定写下这篇blog。播放器已经封装好,结构很清晰,直接调用即可。这里附上效果图和demo(点击下载)! 其中,图一为全屏播放,图二为播放中,图三为暂停,图四为上滑展示小窗口,图五为网络异常提示。 二、方案选择...原创 2018-01-23 15:08:55 · 4431 阅读 · 5 评论 -
【Android 源码解析】从源码角度深入分析Handler消息机制
一、引言说起消息机制,相信每一个Android开发都不陌生。从开始写Android代码的第一天起,我就一直在试图理解handler机制,这几年中也不断去读handler源码。最近有了一些收获,觉得自己已经非常了解handler源码了,故在这里做下总结,希望分享给需要的小伙伴。首先先看如上这个异常:只有创建View的原始线程才能更新UI。这个异常在什么情况下出现呢?在Android系...原创 2018-01-23 20:56:03 · 328 阅读 · 0 评论 -
【Android 自定义控件】自定义View相关知识总结
1. 构造函数带一个参数的构造函数,是在代码中New出这个自定义View时调用public MyCustomView(Context context) { this(context, null); }带两个参数的构造函数,是在xml中定义这个自定义View时调用public MyCustomView(Context context, Attribut...原创 2018-01-25 11:15:04 · 179 阅读 · 0 评论 -
【Android 编程架构】MVC/MVP/MVVM
Android发展到今天比较主流的架构是MVP,但是MVP其实也是对MVC的一种演变,所以在着重介绍MVP之前先总结一下MVC模式。MVC定义在Android开发过程中流行的开发框架曾经采用的是MVC模式,用MVC模式的好处就是便于UI界面的显示和业务逻辑的分离。 MVC的全名是Model View Controller,中文意思就是“模型 视图 控制器”,它是一种软件的设计典范,它...原创 2018-02-18 01:17:45 · 1004 阅读 · 0 评论 -
【Android View相关】View的绘制机制
View树的绘制流程measure(计算视图大小)–>layout(安置视图位置)–>draw(重绘视图) 在onMeasure方法中会递归对所有子元素进行测量,layout过程与measure过程类似,也是一个递归的过程。measure measure测量是一个从上到下的递归过程。在measure方法中有几个比较重要的参数: 1. ViewGroup.Layou...原创 2018-02-18 23:18:25 · 383 阅读 · 0 评论 -
【Android 编程架构 程序设计】多Item类型的RecyclerView替代scrollView(附demo)
今天写这篇博客是为了向大家推荐一个我自己设计的编程框架,这个框架使用起来有非常多的优势,开发起来也非常灵活。只要是常规的业务页面,都可以使用这个框架进行开发!!!!以前我们开发一个页面,几乎都是采用ScrollView作为父容器,然后在ScrollView中包含各个模块View。这样的编程框架有以下两个缺点:1、加载时间长。2、占用内存大。因为进入页面需要把全部模块都加载出...原创 2017-05-19 10:26:02 · 3438 阅读 · 2 评论 -
【Android 手势冲突】Colin带你彻底解决RecyclerView与ScrollView滑动冲突问题,并实现RecyclerView悬停导航栏(附demo哦)
在新一期的需求中,产品要求我们做出和美团某个页面类似的功能,即一个页面包含在scrollView中,上面一个部分放置一些常用的广告banner、宫格tab等,下面放置一个RecyclerView用于展示具体的产品列表。要想实现上述功能,不可避免地要用到ScrollView嵌套RecyclerView。为什么要用RecyclerView?因为下面的产品列表项非常多,有60条,如果一次性加...原创 2017-05-26 16:00:52 · 19736 阅读 · 29 评论 -
【Android 多模块构建】如何启动另外一个module中的Activity
一、多模块构建比如下图是我们现在工程的结构 project ├─── setting.gradle ├─── build.gradle ├─── app │ └─── build.gradle └─── testlibrary └─── build.gradle 要想进行多模块构建,必须要告诉gradle项...原创 2017-05-27 15:01:34 · 16086 阅读 · 3 评论 -
【Android okhttp源码解析 一】okhttp框架简单介绍
1. 同步请求方法以同步get请求为例,同步请求主要分为3步: a. 创建OkHttpClient对象和Request对象 b. 将Request封装成Call对象 c. 调用Call的execute()方法发送同步请求,进入阻塞状态,直到收到响应 2. 异步请求方法以异步get请求为例,异步请求主要分为3步: a. 创建OkHttpClient对象和Request对象 ...原创 2018-04-01 00:22:04 · 523 阅读 · 0 评论 -
【Android okhttp源码解析 二】同步请求流程和源码分析
1. 创建OkHttpClient对象 这里使用Builder模式来给OkHttpClient对象的成员变量赋值,这里最重要的两个成员变量时dispatcher和connectionPool。其中,(1)dispatcher是一个分发器类,由它决定网络请求是直接处理还是缓存等待,对于同步请求,这个分发器只是把同步请求放到队列当中。(2)connectionPool是一个连接池...原创 2018-04-01 00:24:31 · 383 阅读 · 0 评论 -
【Android okhttp源码解析 三】异步请求流程和源码分析
就同步和异步请求的方法调用来说,两者的差别不是很大。执行同步请求调用的是execute()方法,执行异步请求调用的是enqueue()方法,而它们两者的内部实现原理还是有很大差别的。 经过对同步请求的分析,我们已经对okhttp网络请求的方法执行很熟悉了,并且前两步都是一样的,我们这里再简单介绍一下。 第一步,创建okHttpClient对象和Request对象;第二步,创建Call对象;第三...原创 2018-04-01 00:27:05 · 459 阅读 · 0 评论 -
【Android okhttp源码解析 四】任务调度核心类dispatcher解析
okhttp如何实现同步异步请求,这就是由dispatcher来管理的。我们来借助一张图来理解一下dispatcher工作原理 每当有网络请求Call时,dispatcher会把这个请求推送到readyAsyncCalls队列中,而okhttp相比其他网络请求框架的高效之处就在于它内部维护了一个线程池,来高效地执行网络请求。我们来看下dispatcher源码。1. dispatche...原创 2018-04-01 00:28:22 · 946 阅读 · 0 评论 -
【Java 基础】Java对List中对象排序
做了Android开发这么久,做过很多次比较两个List<Object>是否相等,或者给List<Object>中元素排序的需求,这里简单总结下,作为“java基础”的第一篇blog。一、给List<Object>中元素排序其实给List<Object>中元素排序非常简单,一行代码就可以搞定Collections.sort(list...原创 2017-09-01 14:03:48 · 871 阅读 · 0 评论 -
【Android 动画】随ScrollView滑动头部缩放动画(附demo)
一、为什么需要做这样的动画?产品提出这样的需求:希望标题栏能够随着scrollView的滑动而进行缩放。这个动画到底是什么样?现在把gif图传一下。当然,实际上线的页面会比这个好看很多,这只是demo而已,不过动画功能已经全部实现。二、这个动画的具体实现思路1、步骤:(1)找到scrollView的scrollListener方法(2)在回调的方法里可以得到滑动距离...原创 2017-08-24 17:34:09 · 4415 阅读 · 1 评论 -
【Android 编程架构】MVP实战(附demo)
今天有时间,把之前用mvp架构开发的一个需求整理一下。网上大多数是介绍mvp的简单应用,而如何在产品级项目中真正应用mvp架构?一、mvp架构的优势到现在为止,我用mvp架构做的需求已经上线了3个大版本,n个小版本了。说实话,刚开始做的时候,并没有意识到mvp对于开发有多大的好处,可是经过这几次版本迭代,mvp架构的优势就凸显出来了——当要加需求时,我只需要改presenter就可以了...原创 2017-07-28 15:31:53 · 683 阅读 · 2 评论 -
【Android 源码解析】bus 实现原理(附demo)
公司级的app肯定包含多个业务,比如淘宝的“天猫超市”、“聚划算‘、”天猫精选“、”天猫直播“、”品牌汇“,这些背后都是一个业务链,也都肯定是不同的业务部门负责的。一般情况下,不同业务部门的代码肯定在不同的module下,那么不同module下的页面如果需要通信该怎么实现?难道要在module之间相互依赖?为了解耦各个module,业务间通信常常需要bus。为什么要解耦?(1)试想,如...原创 2017-07-13 18:03:36 · 5733 阅读 · 16 评论 -
【Android 项目构建】深入理解Gradle
一、Gradle基础1、Gradle是什么? Gradle是以groovy为编程语言,面向java应用的自动化构建工具。 2、Gradle文件的三种类型:(1)类型:settings.gradle、根目录下build.gradle、module目录下build.gradle。(2)执行顺序:settings.gradle在初始化阶段执行,根目录下build...原创 2017-07-10 16:29:22 · 412 阅读 · 0 评论 -
【Android 开源框架】ButterKnife集成Android Studio
在rootProject的build.gradle中的dependencies中添加 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'在module的build.gradle中顶部添加 apply plugin: 'android-apt'在dependencies中添加 ...原创 2017-07-04 10:47:44 · 292 阅读 · 0 评论 -
【Android 动画】封装好的可滑动指示器indicator,可直接拿来使用(附demo)
在之前的开发中,指示器都是跟viewpager配合着使用,这样如果想在切换时实现indicator的平滑滚动,只需要配合使用onPageScrolled就可以了。因为onPageScrolled会不断回调,这样就可以在这里去实时刷新UI。而如果indicator不是配合ViewPager使用呢?就像下面这个页面,就没有配合ViewPager一起使用。下面使用的是RecyclerView,当...原创 2017-07-03 14:18:26 · 5452 阅读 · 0 评论 -
【Android 异常与性能优化】Bitmap相关
LRU它用来清理最近最少使用对象,其内部是通过LinkedHashMap实现的。它提供了get和put方法来完成对象的添加和获取,当缓存满了它可以提供一个trimToSize方法来清理最近最少使用对象。我们来看下这个方法是如何实现的: 可以看到这个方法会一直循环判断size是否小于maxSize,如果不小于maxSize,则会从LinkedHashMap中依次remove下一个元素,并调...原创 2018-02-19 14:01:37 · 320 阅读 · 0 评论 -
【Android 异常与性能优化】UI卡顿相关
UI卡顿原理60fps-&amp;gt;16ms 接下来我将带大家看下这两个数字的原理。其实很多用户感受到的卡顿问题,就是来源于UI渲染。我们知道Android系统每隔16ms发出信号渲染一次UI,如果每一次渲染都成功就能达到流畅的画面,如果一次渲染在16ms内无法完成就会让用户感受到卡顿。 我们在滑动listView时有时会感觉到卡顿,这是因为Item结构过于复杂/层级过多,无法在16ms内渲...原创 2018-02-19 15:40:22 · 379 阅读 · 0 评论 -
【Android 异常与性能优化】内存管理
内存管理机制概述分配机制 操作系统会为每一个进程合理地分配内存资源,从而保证每一个进程都能正常运行,而不至于内存不够使用或内存占用过多。回收机制 操作系统会在内存不足时合理地回收内存并再分配内存,从而保证新的进程能够正常进行。Android内存管理机制分配机制 Android在为每个进程分配内存的时候采用了弹性的分配方式,就是说,一开始系统不会为app分配太多内存,而是为每一个app分原创 2018-02-19 16:17:39 · 270 阅读 · 0 评论 -
【Java 基础】反射
编译时vs运行时“编译时”是指,将java代码编译成class文件的时期,不涉及内存。 “编译时类型”是指,编译时类型由声明该变量时使用的类型决定。“运行时”是指,java虚拟机执行class文件的时期,涉及内存。 “运行时类型”是指,运行时类型由实际赋给该变量的对象决定。动态绑定 “编译时”调用的是声明类型的成员方法,“运行时”调用的是实际类型的成员方法。 注意:调用引用类型的...原创 2018-02-17 12:52:45 · 256 阅读 · 0 评论 -
【Android 第三方SDK】第三方推送服务--个推
这几天刚把第三方推送服务集成好,为了方便自己总结,我决定记录一下自己对接第三方推送服务的心得。1、国内几大推送服务商对比为了集成第三方推送服务,我几乎找遍了国内各大推送服务方。这里来总结一下我所了解到的消息。我了解过的有:个推、极光、友盟、信鸽、阿里云推送、百度。对接这种第三方服务,个人建议最好的办法就是找自己圈子里的朋友,问问他们公司用的是什么。因为就拿推送服务来说,国内的推送服务都差不太多,没...原创 2016-05-17 22:12:45 · 4337 阅读 · 1 评论 -
【Android 第三方SDK】breakpad在linux下编译
我的mentor要求我去build谷歌的crash分析工具breakpad,弄了一天终于解决了,在这里记录一下。注意!国内的方法大多都是错误的!1、首先先读breakpad的官方指南https://chromium.googlesource.com/breakpad/breakpad/+/master/docs/2、通过https://chromium.googlesource.com/break...原创 2016-05-17 22:44:15 · 934 阅读 · 0 评论 -
【Android 实战】mac下反编译apk
在windows下反编译apk的方法已经烂大街了,而mac下如何反编译apk呢?非常简单!只需要4步:1、下载相关软件下载链接http://download.csdn.net/download/hanhailong726188/83233712、把apk后缀改为zip,然后用解压缩软件打开。复制里面的classes.dex文件3、把复制的classes.dex放到dex2jar-0.0.9.15(...原创 2017-07-12 15:22:03 · 423 阅读 · 0 评论 -
【Android Fragment相关】DialogFragment怎么玩?
现在DialogFragment已经完全取代Dialog了,DialogFragment怎么玩呢?有三点需要注意:1、DialogFragment怎么使用;2、DialogFragment怎么与Fragment通信;3、DialogFragment使用过程中遇到的坑及解决办法。一、DialogFragment如何使用?跟Fragment使用方法类似,需要实现几个重要的父类方法(onCreate,o...原创 2017-08-07 18:02:53 · 456 阅读 · 0 评论 -
【Android 基础】bundle通信
在Android中,Bundle常用来进行Activity之间值传递。在日常开发中,对于Activity之间的值传递,我有的时候会选择用bundle,有的时候会之间用intent。今天正好赶上提测,总结一下。一、Bundle与intent应用场景是什么?到底什么关系?遇到问题第一步肯定是查看源码,通过查看源码发现,intent内部其实也是通过bundle传值。public Intent putEx...原创 2017-08-31 15:39:52 · 710 阅读 · 0 评论 -
【Android 源码解析】浅谈DecorView与ViewRootImpl
一、前言对于Android开发者而言,View无疑是开发中经常接触的,包括它的事件分发机制、测量、布局、绘制流程等。如果要自定义一个View,那么应该对以上流程有所了解、研究。在深入接触View的测量、布局、绘制这三个流程之前,我们从Activity入手,看看从Activity创建后到View的绘制之前,所要经历的步骤。 二、从setContentView说起一般地,我们在Ac...原创 2017-08-31 16:22:02 · 5899 阅读 · 0 评论 -
【Android View】使用WebViewJavaScriptBridge
最近接手一个需求,涉及到h5页面调用java方法。虽然开发Android三年了,但我并没有开发过需要h5页面调用java方法的需求。在做相关的业务开发之前,我自己研究了一些js调用java代码的背景知识,这里做一下总结。WebView基本使用方法:(1)可动态添加、也可在xml内添加xml中添加<WebView android:id="@+id/webview...原创 2017-09-01 11:35:41 · 838 阅读 · 0 评论 -
【Android 源码解析】应用窗口Window的实现机制
一、前言:【1】Android系统中窗口分为三类:应用窗口:每个Activity对应的窗口;子窗口:必须依附在应用窗口上的窗口;系统窗口:由系统创建,不依赖任何应用窗口。二、应用窗口的创建过程:【1】初始化Window、WindowManager:先回顾一下Activity的启动过程——由ActivityManagerService通过Bindler进程间通信机制向客户端进程ActivityThr...原创 2017-12-11 20:20:47 · 449 阅读 · 0 评论 -
【Android Activity相关】任务栈、启动模式相关问题总结
1.任务栈 任务栈在android当中真的是非常非常重要的概念。“栈”顾名思义是一个先进后出的容器,“任务栈”是用来存储Activity的,当我们打开一个新的Activity或者退出一个Activity,都会在“任务栈”中添加或删除这个Activity,所以一个“任务栈”其实是包含了一个Activity的集合,Android系统可以通过任务栈有序地管理每一个Activity。 在And...原创 2017-12-14 16:09:36 · 298 阅读 · 0 评论 -
【Android Activity相关】Activity的生命周期问题总结
1.什么是Activity Activity是与用户交互的接口,它提供了一个界面,让用户进行点击滑动等操作。2.Activity的四种状态 (1)running:Activity处于活动状态,可以提供给用户交互操作,处于Activity栈顶。 (2)paused:Activity失去焦点(被非全屏Activity占据,被透明Activity占据等),这时用户只是失去了与Activ...原创 2018-02-02 10:29:48 · 236 阅读 · 0 评论