自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 View从调用invalidate到draw经历的主要流程

话不多说,先上时序图。View调用invalidate()后到执行它的draw()方法主要经历了如图所示的流程,这里面主要涉及到了View、ViewRootImpl、MessageQueue(Handler这一整套)、Choreographer、DisplayEventReceiver这几个模块,其实这里的每一个模块都是比较复杂的,本文从View调用invalidate()到执行它的draw()方法这一流程视角分析一下这些模块的联系。android的视图是View的树状结构。View调用i.

2020-08-01 18:23:02 547

原创 关于判空逻辑的思考

工作五年来,经历过两款线上App的android端开发,并且都是大厂的产品。发现代码中有大量的判空逻辑,有的地方甚至已经到了令人发指的程度,几乎每个变量的使用都有判空逻辑。空指针异常号称“billion-dollar mistake”,在代码中随处可见;但是空指针异常也非常“容易解决”,如果只是解决空指针异常这个crash只需要一行判空代码就可以了,但是这种解决办法常常会导致显示的异常,例如:该有的信息没有显示出来、展示一个空页面、一个“网络错误请重试”的tips等。线上app代码满是判...

2020-06-01 10:07:53 391

原创 android View架构总结

View的特点是灵活,每次学习View的时候都感觉学懂了;但是在实际开发的时候总也会遇到一些View的问题感觉比较神奇,最近在组内做了一个关于View的分享,主要是从View的绘制和View的事件传递两个方面介绍View的体系架构。一.View绘制流程    二.View事件传递流程...

2018-12-08 12:13:50 321

原创 MVC、MVP、MVVM总结

1.MVC定义(总结自Head First设计模式)MVC架构像一块夹心饼干,视图和模型是上下的饼干层;控制器是中间的奶油层,负责黏连视图和模型。                              MVC架构的目的是实现UI模块、数据模块、业务逻辑模块的解耦,在MVC架构内部利用了其它的设计模式。模型利用“观察者”让控制器和视图可以随最新的状态改变而更新;视图和控制器实现了“策...

2018-10-22 09:54:59 249

原创 android View移动总结

android中View的移动分为两种,View位置的移动和View内容的移动。一、 View位置移动的方法修改mTranslationX或mTranslationY的值 设置MarginLayoutParams的margin值 设置ViewGroup.LayoutParams的width或height 设置View的mLeft、mRight、mTop、mBottom 对Matri...

2018-08-17 14:20:38 482

原创 Android事件传递总结

Android中事件传递机制是非常重要但又很复杂的一个知识点,在实现一些自定义View、处理滑动冲突时都需要复写事件传递相关的函数。本文总结了不同事件的传递过程,至于事件传递的dispatchTouchEvent()、onInterceptTouchEvent()、onTouchEvent()这三个函数的具体实现可以阅读源码。 Android中的事件分为以下几种 ACTION_DOWN、A...

2018-05-23 21:32:54 2190 1

原创 volatile关键字详解

关键字volatile是Java虚拟机提供的最轻量级的同步机制。在Java API应用层,对volatile关键字的描述是具备以下两个特点:(1)保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变量的值,新值对于其它线程来说是立即得知的。(2)禁止指令重排序优化。    那么虚拟机是如何实现volatile关键字这两条特性的呢?这首先要从Java内存模型说起。

2018-01-14 22:27:43 1356

原创 ListView嵌套卡顿问题分析及解决

最重要的是在架构设计的时候尽量避免LiveView嵌套情况的发生,因为ListView嵌套后,在一些手机上会发生卡顿现象,而且不容易解决。然而,由于产品的设计,或者界面越来越复杂,有的时候ListView嵌套还是不可避免的发生了;ListView嵌套后刷新ListView时在一些手机上会发生比较明显的卡顿现象。卡顿发生后,首先要确认卡顿发生的原因。通过打印日志的方式,观察一下调用Adapter的no

2017-11-30 14:46:26 2607

原创 Android自定义View的动画实现方法

在自定义的柱状图中实现动画的两种方法:第一种方法,通过延时调用invalidate()方法;第二种方法,通过属性动画实现。

2017-09-19 18:16:36 2196

原创 Activity ActivityManagerService以及WindowManagerService之间的关系

本文,通过应用程序开始启动到第一个Activity的View内容在手机屏幕上完全展示出来的过程讲述Activity、ActivityManagerService、WindowManagerService三者之间如何发生关系的。

2017-08-26 12:02:38 2934

原创 android项目中引入CoordinatorLayout控件问题总结

在工程中导入support-v7包后,产生了依赖冲突,通过修改依赖库文件的版本号解决了依赖冲突问题。在使用CoordinatorLayout的过程中,不能使头部的View和ListView联动滑动。

2017-07-18 18:22:40 3723

原创 根据文本内容的长度动态的设置TextView的高度

在做Android开发中,经常需要根据文本内容的长度和手机屏幕的大小动态的设置TextView的高度。设置TextView的高度后,再设置TextView可以滑动,就可以展示完整的文本,但是TextView的滑动效果不流畅;可以给TextView外层包一个ScrollView,通过设置ScrollView的高度,通过ScrollView的滑动展示完整的文本内容。 根据文本内容的长度设置TextVi

2017-06-28 20:39:53 4682

原创 Binder通信学习总结

本文是笔者学习Binder通信机制的要点总结,并没有对Binder通信机制进行详细的介绍。描述了Binder机制的四大模块,以及Binder通信的主要特点:数据传递单向性和数据拷贝一次。

2017-02-19 16:20:20 781

原创 可滑动Header控件的实现

本文从滑动冲突产生的原因、解决方案以及代码实现过程三个方面,介绍了可滑动Header控件的实现过程。

2016-11-28 21:41:20 429

原创 Android 监听软键盘的显示与隐藏

在Android开发中,经常需要监听软键盘的显示状态,而有时候键盘的显示或隐藏是由系统自动调用触发的,但是对系统自动触发的软键盘的显示或隐藏不太方便监听。今天介绍两种监听软键盘显示和隐藏的方法。第1种方法: 给布局文件最外层的View(在本文中成为mMainView)添加addOnLayoutChangeListener监听,官方文档对该接口的解释是: Add a listener that w

2016-09-21 21:56:06 1533 1

原创 ListView恢复位置

在一个ListView里面切换tab,两个tab显示的数据的数据对象一样,只是数据类型不一样,两个tab共用了一个ListView实例和一个Adapter实例。在切换tab的时候恢复ListView在该tab中上一次的位置。

2016-08-15 21:44:00 450

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除