android
文章平均质量分 83
ZionLife
这个作者很懒,什么都没留下…
展开
-
Recyclerview中checkbox的复用问题
在Recyclerview中,如果item中使用了checkbox之类的可以改变状态的控件,会出现控件的状态也被复用的情况。 - 暴力的解决方法就是停用ViewHolder的复用:viewHolder.setRecyclable(false),不过会导致使用时卡顿严重。 - 另一种方法是维护一个list,里面存放状态改变的item的position。在 onBindViewHolder方法中,原创 2016-11-14 17:34:14 · 1877 阅读 · 0 评论 -
MVC与MVP对比
MVC模式MVC的全称是Model-View-Controller,模型-视图-控制器。MVC是一种框架模式而非设计模式。GOF把MVC看作是三种设计模式——观察者模式、策略模式与组合模式的合体,核心是观察者模式,也就是一个基于发布/订阅者模型的框架。在Android开发中,View对应的是各个布局文件,Controller对应的是Activity,而Model层主要是对应于从本地或网络获取数据、处原创 2017-10-09 20:48:17 · 718 阅读 · 0 评论 -
OkHttp深入理解(4)ConnectInterceptor
CacheInterceptor中如果没能成功使用缓存,接下来就要准备向服务器发起请求。所以接下来的拦截器就是ConnectInterceptor。ConnectInterceptor的主要职责是负责与服务器建立起连接。ConnectInterceptor的intercept方法很精简,直接上源码: @Override public Response intercept(Chain chain)原创 2017-10-10 18:35:38 · 892 阅读 · 0 评论 -
OkHttp深入理解(5)CallServerInterceptor
这是整个拦截器链中的最后一个拦截器,经过了前面拦截器进行的准备工作,在CallServerInterceptor中会真正向服务器发起请求。intercept方法的代码不多: @Override public Response intercept(Chain chain) throws IOException { RealInterceptorChain realChain = (RealIn原创 2017-10-11 14:04:30 · 695 阅读 · 2 评论 -
Broadcast相关总结
个人对广播使用得不多,在目前接触的项目开发中暂时没有使用到广播作为组件间交流工具,仅仅是在做应用复活的时候,接触过利用系统广播拉活的机制(现在已经不那么灵验了)。不过广播接收者作为Android四大组件之一,其重要性自然不言而喻 ,也是各类面试的常客,还是得好好总结一番。定义广播是一种广泛应用的在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent,这个Intent中可原创 2017-10-11 18:42:30 · 381 阅读 · 0 评论 -
观察者模式与Fragment间通信
前两天腾讯电话面试,被狠狠地虐了一把。本来以为还有周末两天可以好好准备,居然投完简历半个钟就打电话过来了,心塞。面试官提到一个问题,fragment间怎样实现通信。我回答通过Activity做中介。面试官要求用低耦合的方式,一时没想起。后来上网找了一下发现可以通过观察者模式来实现。虽然也是通过Activity做中介,但是不是直接在Fragment中通过操控另一个Fragment方式,而是在frag原创 2017-06-25 11:53:19 · 1131 阅读 · 0 评论 -
Dalvik虚拟机内存管理与垃圾回收相关
概述 这篇笔记摘抄自老罗的博客: http://blog.csdn.net/luoshengyang/article/details/41338251 http://blog.csdn.net/luoshengyang/article/details/41822747 Dalvik虚拟机内存分配的底层依赖是基于Doug Lea编写的dlmalloc内存分配器的,在Heap上完成。按照分配规...原创 2018-03-11 20:22:46 · 561 阅读 · 0 评论 -
Activity启动过程
概述 Activty是四大组件之首,重要性不言而喻。这篇笔记整理于寒假实习期间,大致总结Activity的启动流程,由于整个启动过程实在太绕,调用链太长,暂时没有完整分析一遍,空缺的看需要再补充。分析过程以API-26为基础。 几个基础对象 ActivityManagerService:简称AMS,服务端对象,负责系统中的所有Activity的生命周期。 ActivityThread:Ap...原创 2018-03-11 20:31:37 · 812 阅读 · 0 评论 -
OkHttp深入理解(3)BridgeInterceptor与CacheInterceptor
上一篇笔记主要记录了RetryAndFollowUpInterceptor的功能,主要负责根据response决定是否对请求进行重定向。这篇笔记记录链中的下两个结点BridgeInterceptor与CacheInterceptor。 BridgeInterceptor BridgeInterceptor负责在request阶段对请求头添加一些字段,在response阶段对响应进行一些gzip解原创 2017-10-09 09:33:35 · 719 阅读 · 0 评论 -
OkHttp深入理解(2)RetryAndFollowUpInterceptor
OkHttp的精髓之一就在于Interceptor。其内部已经为我们定制了五个Interceptor——RetryAndFollowUpInterceptor、BridgeInterceptor、CacheInterceptor、ConnectInterceptor、CallServerInterceptor。除了系统预设的五个Interceptor之外,我们还可以自定义Interceptor实现各原创 2017-10-08 19:22:00 · 620 阅读 · 0 评论 -
OkHttp深入理解(1)综述
用OkHttp这么久,一直只知道基本用法, 没有去深入探究,以至于遇到一些需求的时候不知道该如何实现,在网络请求部分中写了许多冗余代码,对于有代码洁癖的我来说简直太痛苦了。现在查阅了许多资料,也慢慢看了一些源码,总算有了粗略的了解。 OkHttp的总体流程大致如下: 首先通过OkHttpClient.Builder创建一个client对象,然后通过Req原创 2017-10-08 13:42:52 · 680 阅读 · 2 评论 -
Android的消息处理机制
简述 Android使用Handler主要原因是为了解决在子线程中无法访问UI线程的矛盾。因为UI线程是不安全的,如果多线程并发访问会导致UI控件处于不可预期的状态。系统不对UI控件上锁是为了避免UI访问的逻辑变复杂,同时也为了避免降低UI访问的效率。 Handler是Android消息机制的上层接口。Handler的运行需要依赖底层MessageQueue和Loo原创 2017-03-17 00:38:48 · 884 阅读 · 0 评论 -
Android中的AsyncTask解析
概述 AsyncTask是一个抽象的泛型类,它是一个轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和后台结果传递给主线程并在主线程中更新UI。AsyncTask封装了Thread和Handler。但是AsyncTask并不适合耗时的后台任务,对于耗时的后台任务建议使用线程池。它提供了Params、Progress和Result三个泛型参数。提供了四个核心方法原创 2017-03-28 23:23:14 · 477 阅读 · 0 评论 -
Bitmap加载与缓存相关
概述 Bitmap在Android中指的是一张图片,可以是各种常见的图片格式。可以使用BitmapFactory类来加载一个图片。BitmapFactory提供了四类方法:decodeFile、decodeResource、decodeStream和decodeByteArray,分别用于支持从文件系统、资源、输入流以及字节数组中加载出一个Bitmap对象。原创 2017-04-09 21:21:13 · 334 阅读 · 0 评论 -
Activity生命周期相关
Activity的子类中两个重要的方法 onCreate(Bundle): 初始化你的activity,使用setContentView(int) 来给activity设置UI,使用findViewById(int)来获取UI中的widgets。 onPause(): 当用户离开这个acitivty时,用户的所有改变(change)在这里应该被保存。原创 2017-03-14 21:01:26 · 454 阅读 · 0 评论 -
View的工作流程
概述 View的绘制流程是从ViewRoot的performTraversals开始的,经过measure、layout和draw三个过程才能最终将一个View绘制出来。 MeasureSpec View的measure过程在绘制的三个流程中是最复杂的。这里先看measure中关键的一个类——MeasureSpec。原创 2017-04-15 23:33:04 · 333 阅读 · 0 评论 -
ListView原理概述
ListView的源码特别长,流程特别多,看完郭神的解析博客(http://blog.csdn.net/guolin_blog/article/details/44996879)还是一脸懵逼。这篇文章根据郭神的文章,尝试记录下ListView源码的总体思路。 RecycleBin 首先ListView继承自AbsListView。AbsListView中有原创 2017-04-20 10:56:07 · 617 阅读 · 0 评论 -
给EditText左右两边设置图片与监听(drawableLeft/drawableRight)/弹出键盘
设置图片: Drawable phoneDrawableLeft = getResources().getDrawable(R.mipmap.phone_login, null); phoneDrawableLeft.setBounds(0, 0, drawableDimension, drawableDimension); Drawable phoneDrawableR原创 2017-04-24 21:24:54 · 1762 阅读 · 0 评论 -
性能优化系列之fragment的懒加载
自从实习以来一直在忙着赶项目进度,没有时间(懒)总结。现在终于有空总结一下这两个多月的收获了。从性能优化中的fragment懒加载开始梳理吧。 项目中使用ViewPager+Fragment,拿练手项目xMusic来说吧,在MainActivity中有两个fragment,一个是本地播放页面,一个是“发现”页面,“发现”页面包含广告轮播图和推荐歌单,图片资源比较多。正常打开app时两个原创 2017-09-14 17:57:11 · 2597 阅读 · 0 评论 -
线程池深入解析笔记
https://www.jianshu.com/p/117571856b28 https://juejin.im/entry/58fada5d570c350058d3aaad 概述 这篇笔记也是整理于寒假实习期间,由于美颜相机demo中的缩略图渲染功能涉及到多线程,使用了线程池减少资源开销,所以整理一下线程池笔记,以便以后查询(待完善)。 使用线程池的主要目的在于: 1. 降低资源消...原创 2018-03-11 20:36:37 · 361 阅读 · 0 评论