android进阶
文章平均质量分 92
android进阶
奋斗的bigHead
做一个有思想的人,实事求是,笃学诚行
展开
-
RecyclerView源码阅读(一) onMeasure、onLayout、onDraw
RecyclerView是google提出ListView的替代品。更强大的缓存支持,Grid模式和Horizantal模式展示。基本使用方式:RecyclerView.setLayoutManager()RecyclerView.setAdapter()RecyclerView.setItemAnimator()RecyclerView.addItemDecoration()解释说明。setLayoutManager:必选项,设置 RV 的布局管理器,决定 RV 的显示风格。常用的有线性原创 2021-04-30 11:43:34 · 487 阅读 · 0 评论 -
写给 Android 应用工程师的 Binder 原理剖析
前言这篇文章我酝酿了很久,参考了很多资料,读了很多源码,却依旧不敢下笔。生怕自己理解上还有偏差,对大家造成误解,贻笑大方。又怕自己理解不够透彻,无法用清晰直白的文字准确的表达出 Binder 的设计精髓。直到今天提笔写作时还依旧战战兢兢。Binder 之复杂远远不是一篇文章就能说清楚的,本文想站在一个更高的维度来俯瞰 Binder 的设计,最终帮助大家形成一个完整的概念。对于应用层开发的同学来说,理解到本文这个程度也就差不多了。希望更加深入理解 Binder 实现机制的,可以阅读文末的参考资料以及相关转载 2021-04-09 11:20:53 · 168 阅读 · 0 评论 -
在子线程中计算RecyclerView数据DiffResult并回调
DiffUtil.Callback介绍RecyclerView 是我们日常开发中最常用的组件之一。当我们滑动列表,我们要去更新视图,更新数据。我们会从服务器获取新的数据,需要处理旧的数据。通常,随着每个item越来越复杂,这个处理过程所需的时间也就越多。在列表滑动过程中的处理延迟的长短,决定着对用户体验的影响的多少。所以,我们会希望需要进行的计算越少越好。现在,我们的列表已经显示在屏幕上,获取的新的数据后需要更新,我们会调用notifyDataSetChanged() 方法。然而这个方法实际上非常消耗原创 2020-11-17 15:31:47 · 832 阅读 · 0 评论 -
Android自定义View:MeasureSpec的真正意义与View大小控制
自定义View是Android开发中最普通的需求,灵活控制View的尺寸是开发者面临的第一个问题,比如,为什么明明使用的是WRAP_CONTENT却跟MATCH_PARENT表现相同。在处理View尺寸的时候,我们都知道最好在onMeasure中设定好自定义View尺寸,那么究竟如何合理的选择这个尺寸呢。直观来说,可能有以下问题需要考虑:自定的View最好不要超过父控件的大小,这样才能保证自己能在父控件中完整显示自定的View(如果是ViewGroup)的子控件最好不要超过自己的大小,这样才能保证子控转载 2020-07-15 18:15:56 · 626 阅读 · 0 评论 -
Android 中不应该使用 Enum 吗?
Android 中不应该使用 Enum 吗?转载 2020-07-10 20:18:28 · 415 阅读 · 0 评论 -
RxJava2操作符使用
1.基本创建操作符create()RxJava 中创建被观察者对象最基本的操作符作用:完整创建1个被观察者对象(Observable) Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() { ...原创 2020-04-07 18:20:10 · 646 阅读 · 0 评论 -
面试时你被问到做过Android哪些优化时该回答什么
一、布局优化:1)尽量减少布局文件的层级。层级少了,绘制的工作量也就少了,性能自然提高。2)布局重用 include 标签和 merge标签3)按需加载:使用ViewStub实现布局懒加载二、绘制优化:基于onDraw会被调用多次,该方法内要避免两类操作:创建新的局部对象,导致大量垃圾对象的产生,从而导致频繁的gc,降低程序的执行效率。不要做耗时操作,抢CPU时间片,造成绘制很卡不...原创 2020-03-22 21:49:02 · 394 阅读 · 0 评论 -
Handler同步屏障机制的原理和使用场景
什么是Handler的同步屏障Handler中的Message可以分为两类:同步消息、异步消息。消息类型可以通过以下函数得知//Message.javapublic boolean isAsynchronous() { return (flags & FLAG_ASYNCHRONOUS) != 0;}一般情况下这两种消息的处理方式没什么区别,在设置了同步屏障时才会出现差...原创 2020-03-22 20:26:48 · 2313 阅读 · 0 评论 -
总结一下Android编码时的一些技巧
1.高效的返回一个带泛型的空集合javaCollections. emptyList()2.判断当前集合size是否为空Collection.isEmpty()3.SharedPreferences清空Key值下的数据SharedPreferences.Editor editor = userSettings.edit();editor.remove("KEY");editor....原创 2020-02-26 08:45:30 · 313 阅读 · 0 评论 -
Dalvik虚拟机与JVM的区别
1.java虚拟机运行的是Java字节码,Dalvik虚拟机运行的是Dalvik字节码;传统的Java程序经过编译,生成Java字节码保存在class文件中,java虚拟机通过解码class文件中的内容来运行程序。而Dalvik虚拟机运行的是Dalvik字节码,所有的Dalvik字节码由Java字节码转换而来,并被打包到一个DEX(Dalvik Executable)可执行文件中Dalvik虚拟机...原创 2018-11-09 16:13:36 · 657 阅读 · 0 评论 -
系统服务与bindService等启动的服务的区别
前言服务可分为系统服务与普通服务,系统服务一般是在系统启动的时候,由SystemServer进程创建并注册到ServiceManager中的。而普通服务一般是通过ActivityManagerService启动的服务,或者说通过四大组件中的Service组件启动的服务。这两种服务在实现跟使用上是有不同的,主要从以下几个方面:服务的启动方式服务的注册与管理服务的请求使用方式服务的启动方...原创 2019-10-31 21:04:27 · 1256 阅读 · 2 评论 -
简单理解Binder机制的原理
概述Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一。Android中的四大组件Activity,Service,Broadcast,ContentProvider,不同的App等都运行在不同的进程中,它是这些进程间通讯的桥梁。正如其名“粘合剂”一样,它把系统中各个组件粘合到了一起,是各个组件的桥梁。当然也存在部分其他的IPC方式,如管...原创 2018-11-14 17:38:55 · 389 阅读 · 0 评论 -
Android大牛的博客连接
一些稀有的博客连接和知识点1.视频播放的第三方框架:vitamio、google开源框架Exoplayer、 jikplayer 2.美团技术团队:http://tech.meituan.com/3.360技术博客:http://blogs.360.cn4.腾讯移动互联网设计团队 MXD:http://mxd.tencent.com/5.腾讯全端技术团队:http://www.alloyteam.c原创 2016-10-27 14:55:35 · 409 阅读 · 0 评论 -
面试必问之Android界面跳转时的生命周期
简单介绍一下后面用到的 Activity:FirstActivity:当前 App 的默认启动 Activity。界面中包含一个点击可跳转到 SecondActivity 的 button。SecondActivity:上面 FirstActivity 跳转的 Activity,界面包含一个点击 finish 当前 Activity 的 button。很简单。咱们先看一下 andro...原创 2019-12-16 16:15:36 · 996 阅读 · 0 评论 -
结合Retrofit的create方法说一下java的动态代理
代理模式 的好处1.可以隐藏委托类的实现;2.可以实现客户与委托类间的解耦,在不修改委托类代码的情况下能够做一些额外的处理。动态代理代理类在程序运行时创建的代理方式被成为 动态代理注意这里的运行时首先看一下在 Retrofit#create 方法中使用到的动态代理 public <T> T create(final Class<T> service) {...原创 2019-12-07 20:48:47 · 394 阅读 · 0 评论 -
解决Activity启动黑白屏问题
先上图。注意看底部,点击图标时会直接显示icon,然后在加载SplashActivity的View。使用的机型是oneplus 5t ,系统是android9.0。首先要说明的是无论是APP启动,还是startActivity都是Activity的启动,最后都是ActivityManagerService启动一个新的Activity。咱们先看一下闪屏的原因。闪屏的原因当点击桌面的launc...原创 2019-12-02 14:01:49 · 580 阅读 · 0 评论 -
2019年10月份android面试的一些总结
2019年10月份android面试的一些总结原创 2019-10-30 14:02:36 · 968 阅读 · 5 评论 -
Java基础篇
Java 基础方面1.什么是面向对象(OOP)?面向对象就是程序的一种设计模式,或者说是一种设计规范。基本思想就是使用对象、类、继承、封装、多态等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。https://blog.csdn.net/u013728021/article/details/102851884...原创 2019-11-25 15:58:56 · 297 阅读 · 0 评论 -
ViewGroup事件分发机制
小结每次按下直到取消或者抬起,都会进行一次事件分发。事件分发是由Activity传递给Window,Window传递给DecorView实际就是ViewGroup的dispatchTouchEvent这个方法进行分发。如果ViewGroup的dispatchTouchEvent方法回false,那么只会响应ACTION_DOWN的事件,其它事件不再响应。如果ViewGroup的dispat...原创 2019-10-31 09:12:14 · 191 阅读 · 0 评论 -
View的事件分发机制
View的两个重要方法dispatchTouchEvent(MotionEvent event) 负责事件分发,事件是从这个方法开始分发的。onTouchEvent(MotionEvent event) 触摸事件。dispatchTouchEvent(MotionEvent event)源码分析public boolean dispatchTouchEvent(MotionEvent ...原创 2019-10-30 20:19:46 · 185 阅读 · 0 评论