
android
文章平均质量分 95
只是一条程序狗
这个作者很懒,什么都没留下…
展开
-
EventBus3.0原理及使用
1.EventBus概述 EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。可以很方便的在Activity,service,Fragment之间进行交互和通信。 EventBus的三要素EventBus有三个主要的元素需要我们先了解一下:Eve原创 2017-04-06 14:11:38 · 469 阅读 · 0 评论 -
Android 属性动画解析(一): 基本用法
转载自:http://blog.youkuaiyun.com/guolin_blog/article/details/435363551.为什么引入属性动画Android之前的补间动画机制其实还算是比较健全的,在android.view.animation包下面有好多的类可以供我们操作,来完成一系列的动画效果,比如说对View进行移动、缩放、旋转和淡入淡出,并且我们还可以借助Anima转载 2017-11-23 18:19:02 · 173 阅读 · 0 评论 -
Android属性动画完全解析(二):ValueAnimator和ObjectAnimator的高级用法
转载自:http://blog.youkuaiyun.com/guolin_blog/article/details/435363551.valueAnimator的高级用法在上篇文章中介绍补间动画缺点的时候有提到过,补间动画是只能对View对象进行动画操作的。而属性动画就不再受这个限制,它可以对任意对象进行动画操作。那么大家应该还记得在上篇文章当中我举的一个例子,比如说我们有一个自定转载 2017-11-23 18:43:01 · 253 阅读 · 0 评论 -
Android属性动画完全解析(三):Interpolator和ViewPropertyAnimator的用法
转载自:http://blog.youkuaiyun.com/guolin_blog/article/details/441711151.Interpolator的用法Interpolator这个东西很难进行翻译,直译过来的话是补间器的意思,它的主要作用是可以控制动画的变化速率,比如去实现一种非线性运动的动画效果。那么什么叫做非线性运动的动画效果呢?就是说动画改变的速率不是一成不变的,像加转载 2017-11-23 19:16:16 · 295 阅读 · 0 评论 -
ANR日志分析方法
1.ANR的类型ANR一般有三种类型:1:KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应A key or touch event was not dispatched within the specified time(按键或触摸事件在特定时间内无响应)具体的超时时间的定义在framework下的Activi原创 2017-12-25 16:08:37 · 1286 阅读 · 0 评论 -
自定义View(一): OnMeasure详解
1.从示例开始自定义一个View,显示"HelloWorld"import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSe原创 2017-12-26 13:54:11 · 290 阅读 · 0 评论 -
自定义View(二): OnLayout详解
1.源码分析探讨自定义控件的第二步onLayout即确定控件的位置,上篇文章我们说到performTraversals方法中会调用host.measure方法,在调用完host.measure方法后,就会调用host.layout对View进行定位,这也是今天我们要讨论的内容。首先我们来看看layout的源码 public final void layout(int l, int原创 2017-12-26 15:15:11 · 583 阅读 · 0 评论 -
Android消息机制:从源代码分析
1.概念介绍1)、成员介绍 Message:主要功能是进行消息的封装,同时可以指定消息的操作形式; Looper:消息循环泵,用来为一个线程跑一个消息循环。每一个线程最多只可以拥有一个。 MessageQueue:就是一个消息队列,存放消息的地方。每一个线程最多只可以拥有一个。 Handler:消息的处理者,handler 负责将需要传递的信息封装成Message,发送给Loo原创 2017-12-27 17:06:55 · 215 阅读 · 0 评论 -
ViewPager轮播详解
主要包括以下内容: ViewPager 基本使用(简介、适配器) ViewPager + TabLayout + Fragment 的使用 ViewPager 轮播图的使用(指示器、标题、自动轮播、首尾循环) ViewPager 的切换效果(PageTransformer)ViewPager 切换效果进阶1.ViewPage的基础使用常用的方法有以下几个: setA原创 2018-01-19 18:13:00 · 6255 阅读 · 0 评论 -
RecyclerView详细使用(二):Herder添加以及adpter封装
1.RecyclerView的优势:它自带ViewHolder来实现View的复用机制,再也不用ListView那样在getView()里自己写了 使用LayoutManager可以实现ListView,GridView以及流式布局的列表效果通过setItemAnimator(ItemAnimator animator)可以实现增删动画(懒的话,可以使用默认的ItemAnimator对象原创 2017-11-15 14:20:35 · 351 阅读 · 0 评论 -
Android屏幕适配详解
1.屏幕适配中的基本概念1.1 测量单位in:英寸inch,物理尺寸,1in =2.54厘米(cm)。4.2寸手机等等就是这个in,通常说的手机4.2寸,都是手机对角线4.2in。dpi:这个知道英文名有助于理解意义,its english name is: Dots Per Inch.每英寸的点数嘛,每英寸的像素个数。例如:320X480分辨率的手机,宽2in,高3in,那么每原创 2017-10-16 11:15:40 · 568 阅读 · 0 评论 -
Android 5.x theme: AppCompatActivity与toolbar的结合
1.概述Android 5.x theme 是material design风格的主题。在API22之前我们使用标题栏基本都是在ActionBarActivity的Activity中处理的,而API22之后,谷歌遗弃了ActionBarActivity,推荐我们也可以说是强制我们使用AppCompatActivity。编译版本和匹配的支持库:compileSdkVersion原创 2017-10-12 11:15:40 · 535 阅读 · 0 评论 -
使用Android studio和MAT分析Android内存泄漏
1.内存泄漏是什么内存泄漏就是一些已经不使用的对象还存在于内存之中且垃圾回收机制无法回收它们,导致它们常驻内存,会使内存消耗越来越大,最终导致程序性能变差。其中在Android虚拟机中采用的是根节点搜索算法枚举根节点判断是否是垃圾,虚拟机会从GC Roots开始遍历,如果一个节点找不到一条到达GC Roots的路线,也就是没和GC Roots 相连,那么就证明该引用无效,可以被回收,内原创 2017-05-12 18:57:16 · 439 阅读 · 0 评论 -
Android service解析(一)
转载自: http://blog.youkuaiyun.com/guolin_blog/article/details/11952435 Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色。它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务。必要的时候我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态。1.基本用法转载 2017-05-18 10:57:43 · 270 阅读 · 0 评论 -
Android Service解析(二):远程Service的使用
转载自:http://blog.youkuaiyun.com/guolin_blog/article/details/9797169关于Service其实还有一个更加高端的使用技巧没有介绍,即远程Service的用法。使用远程Service甚至可以实现Android跨进程通信的功能,下面就让我们具体地学习一下。本篇文章的主题是介绍远程Service的用法,如果将MyService转换成一个转载 2017-05-18 11:42:36 · 322 阅读 · 0 评论 -
RxJava详解(一)
1.RxJava 项目地址及依赖GitHub 链接和引入依赖的 gradle 代码: Github: https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxAndroid 引入依赖: compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactiv原创 2017-07-11 18:18:36 · 740 阅读 · 0 评论 -
Retrofit2 完全解析(一)
1.概述 在对Android 开发中,我们都是从原生的HttpUrlConnection到经典的 Apache公司的HttpClient,再到对前面这些网络基础框架的封装(比如Volley、AsyncHttpClient等)。Http请求相关开源框架还是很多的,今天我们讲解 Square 公司开源的Retrofit。Square 公司的框架总是一如既往的简洁优雅!Retrofi原创 2017-07-03 18:38:48 · 571 阅读 · 0 评论 -
Retrofit2完全解析(二)
1. Retrofit源码解析1.1 retrofit如何为我们的接口实现实例通过上文的学习,我们发现使用retrofit需要去定义一个接口,然后可以通过调用retrofit.create(IUserBiz.class);方法,得到一个接口的实例,最后通过该实例执行我们的操作,那么retrofit如何实现我们指定接口的实例呢?其实原理是:动态代理。Java中已经提供了非常简单的API帮原创 2017-07-04 11:12:23 · 511 阅读 · 0 评论 -
RecyclerView使用解析
1.概述该控件用于在有限的窗口中展示大量数据集,可以实现ListView,GridView的功能,通过导入support-v7对其进行使用。那么有了ListView、GridView为什么还需要RecyclerView这样的控件呢?整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoratio转载 2017-07-26 14:01:19 · 315 阅读 · 0 评论 -
RxLifecycle解决RxJava内存泄漏
1.RxJava导致内存泄漏使用RxJava发布一个订阅后,当页面被finish,此时订阅逻辑还未完成,如果没有及时取消订阅,就会导致Activity/Fragment无法被回收,从而引发内存泄漏。写段代码测试一下,定义一个Activity,布局中显示一张图片,这样可以直观的看到此Activity的内存占用情况,然后在Activity中发布一个订阅后,关闭Activity,订阅逻辑如下原创 2017-10-10 16:15:46 · 1509 阅读 · 0 评论 -
RecyclerView系列(三): 滑动事件检测
1.概述这是一个关于RecycleView滑动事件检测RecycleView滑动到顶部或者底部的状态. 可用于实现RecycleView加载更多或者刷新(虽然刷新可以直接用SwipeRefreshLayout).也可用于某些滑动相关的需求,如FloatingActionButton的隐藏与显示之类的.2.滑动监听RecycleView本身已经提供了滑动的监听接口,OnScrollLis原创 2018-02-01 20:57:59 · 1883 阅读 · 0 评论 -
Fresco的解析和使用
1.概念介绍Fresco是Facebook开源Android平台上一个强大的图片加载库,也是迄今为止Android平台上最强大的图片加载库。优点:相对于其他开源的第三方图片加载库,Fresco拥有更好的内存管理和强大的功能,基本上能满足所有的日常使用场景。缺点:整体比较大,不过目前的版本已做了拆分,你只需要导入你使用到的功能相关的库。从代码层面来说侵入性太强,体现在要使用它需要用F原创 2018-01-18 19:14:00 · 3696 阅读 · 0 评论 -
RecyclerView 的ViewPageLayoutManager
实现类似抖音的的全屏上下滑动翻页效果,方案有两种:1.ViewPageViewPager来实现的时候,手机内存不够用的情况就会显现出来2.RecyclerViewRecyclerView可以帮我们处理内存的回收和利用实现过程:1.自定义LayoutManager,并且继承LinearLayoutManager,这样就得到一个可以水平排向或者竖向排向的布局PagerSna...原创 2019-01-17 18:43:52 · 3145 阅读 · 0 评论 -
解析RecyclerView.ItemDecoration
1.简介RecyclerView.ItemDecoration的作用是给ItemView添加装饰,绘制更多内容,增强itemUI的效果。例子:1)绘制分割线2) 数据分组等2.使用方法:ItemDecoration类中仅有3个方法,具体如下:public class TestDividerItemDecoration extends RecyclerView.ItemDe...转载 2019-01-18 18:29:24 · 976 阅读 · 0 评论 -
模块化,组件化,插件化简析
1.架构演变1.1 单工程模式我们开发移动项目,我相信大多用的是单工程单任务的开发模式,二话不说,直接就开始写起,是不是这样呢? new Project -> 分包 -> 写起, 简单直接粗暴,但有效率,上手快,没有杂七杂八的处理方式。这是因为项目简单,业务单一。2.1 模块化Android Studio出来了,多出来了一个新的概念, Project, Module.....原创 2019-01-16 11:31:48 · 745 阅读 · 0 评论 -
RecyclerView 扩展知识:SnapHelper
1.简介RecyclerView在24.2.0版本中新增了SnapHelper这个辅助类,用于辅助RecyclerView在滚动结束时将Item对齐到某个位置。特别是列表横向滑动时,很多时候不会让列表滑到任意位置,而是会有一定的规则限制,这时候就可以通过SnapHelper来定义对齐规则了。SnapHelper是一个抽象类,官方提供了一个LinearSnapHelper的子类,可以让Rec...原创 2019-01-16 18:47:23 · 494 阅读 · 0 评论 -
RecyclerView扩展知识: DiffUtil
1.简介DiffUtil是support-v7:24.2.0中的新工具类,它用来比较两个数据集,寻找出旧数据集-》新数据集的最小变化量,定向刷新列表。它最大的用处就是在RecyclerView刷新时,不再使用mAdapter.notifyDataSetChanged()全部刷新,全部刷新的缺点:不会触发RecyclerView的动画(删除、新增、位移、change动画) 性能较低,毕...原创 2019-01-16 19:19:10 · 1697 阅读 · 0 评论 -
混合开发: Android与H5互相调用
1.H5调起原生1.1 对WebView进行初始化:WebSettings settings = webview.getSettings();settings.setJavaScriptEnabled(true); //允许在WebView中使用js1.2 创建一个CustomWebViewClient extends继承WebViewClient,也可以专门定义一个类JavaSc...原创 2019-02-25 14:57:20 · 1722 阅读 · 0 评论 -
Google AAC(Android Architecture Components)实现MVVM展示架构
1.AAC架构简介Android Architecture Components,实际上是android官方提供的一系列组件,用来实现MVVM架构。官方架构图如下:View层 绿色框中的Activity/Fragment,继承至LifecycleActivity\LifecycleFragment,是UI控件的宿主。核心职责是:更新UI控件显示,包括状态及数据,由ViewMod...原创 2019-03-07 19:58:04 · 4036 阅读 · 1 评论 -
java反射及应用
1.反射概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。反射就是把java类...原创 2019-04-08 17:07:44 · 3150 阅读 · 0 评论 -
Gradle 使用指南
1.Gradle概述 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。Gradle就是工程的管理,帮我们做了依赖,打包,部署,发布,各种渠道的差异管理等工作。 2. Gradle文件分析...原创 2018-07-05 18:46:29 · 1673 阅读 · 0 评论 -
AS升级到3.0之后的遇到的问题与解决办法
Android Studio升级到3.0以后,原来工程的gradle配置文件会有一些不匹配的地方,会出现一些错误,主要如下:1.gradle必须升级到4.0以上我们在AS中用到的Gradle其实应该被叫做 Android Gradle Plugin,也就是安卓项目上的gradle插件;Gradle插件会有版本号,每个版本号又对应有一个或一些 Gradle发行版本(一般是限定一个最低版本),也就是我...原创 2018-07-09 16:07:36 · 559 阅读 · 0 评论 -
ButterKnife使用详解
前言: ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class。原创 2018-04-24 19:19:28 · 476 阅读 · 0 评论 -
Http缓存机制
1.缓存规则解析为方便大家理解,我们认为浏览器存在一个缓存数据库,用于存储缓存信息。在客户端第一次请求数据时,此时缓存数据库中没有对应的缓存数据,需要请求服务器,服务器返回后,将数据存储至缓存数据库中。HTTP缓存有多种规则,根据是否需要重新向服务器发起请求来分类,我将其分为两大类(强制缓存,对比缓存)在详细介绍这两种规则之前,先通过时序图的方式,让大家对这两种规则有个简单原创 2018-02-05 17:07:16 · 234 阅读 · 0 评论 -
okHttp系列(二):高级功能:下载,上传以及拦截器
1.下载文件在ResponseBody中有如下接口:byte()string()bytesStream()charStream()其中byte()和string()是一次读取,用来获取体积比较小的内容。但如果遇到大文件的话,就应该用流的方式。 所谓下载也就是将服务器返回的数据存储在本地。当体积体积较小时,用byte()或者string()获取内容原创 2018-02-07 15:55:39 · 1389 阅读 · 0 评论 -
okHttp系列(三): 缓存
1.基本的cacheOKHTTP如果要设置缓存,首要的条件就是设置一个缓存文件夹,在Android中为了安全起见,一般设置为私密数据空间。通过getExternalCacheDir()获取。如然后通过调用OKHttpClient.Builder中的cache()方法。如下面代码所示://缓存文件夹File cacheFile = new File(getExternalCacheDi原创 2018-02-07 17:22:06 · 429 阅读 · 0 评论 -
CoordinatorLayout使用详解: 打造折叠悬浮效果
1.简介CoordinatorLayout遵循Material 风格,包含在 support Library中,结合AppbarLayout, CollapsingToolbarLayout等 可 产生各种炫酷的折叠悬浮效果。- 作为最上层的View - 作为一个 容器与一个或者多个子View进行交互2.AppBarLayout它是继承与LinearLayout的,默认 的 方原创 2018-03-15 11:30:42 · 80833 阅读 · 19 评论 -
CoordinatorLayout自定义Behavior
1.Behavior简介Behavior是CoordinatorLayout里面的一个内部类,通过它我们可以与 CoordinatorLayout的一个或者多个子View进行交互,包括 drag,swipes, flings等手势动作。今天 我们主要着重介绍里面的几个方法方法解释boolean layoutDependsOn(Coordi原创 2018-03-15 17:01:19 · 760 阅读 · 0 评论 -
Activity任务栈及启动模式详解
1.任务栈简介1). android任务栈又称为Task,它是一个栈结构,具有后进先出的特性,用于存放我们的Activity组件。2). 我们每次打开一个新的Activity或者退出当前Activity都会在一个称为任务栈的结构中添加或者减少一个Activity组件,因此一个任务栈包含了一个activity的集合, android系统可以通过Task有序地管理每个activity,并决原创 2018-03-12 16:13:26 · 968 阅读 · 0 评论 -
利用NestedScrolling实现悬浮式导航详情页
1.需要实现的效果图如下:实现方式主要有两种:1)、ScrollView内嵌软件介绍+ViewPager+ViewPager中是ScrollView,这种方式呢,纯原生,没有涉及到自定义控件,但是这样嵌套呢,涉及到测量以及事件的冲突处理。2)、将做外层的ScrollView改为了自定义的一个控件,继承自LinearLayout,叫做StickyNavLayout,利用Nes原创 2018-03-05 18:14:15 · 1139 阅读 · 0 评论