![](https://img-blog.csdnimg.cn/20190508160340515.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android进阶
文章平均质量分 95
本专栏中的博客,以任玉刚大神的《Android开发艺术探索》为基础,参考多方面博客,介绍了比《第一行代码》更为深入的Android知识。
快乐肥柴
致力于做一只快乐肥柴
展开
-
Android进阶知识(一):MVC、MVP与MVVM模式简介
**Android中MVC、MVP与MVVM模式简介**一、 MVC模式MVC(Model View Controller)是软件架构中最常见的一种框架,简单的来说就是通过controller的控制去操作model层的数据,并且返回给view层展示,三者的关系如下图。图1 MVC模式MVC工作原理:当用户触发事件的时候,view层会发送指令到controller层,接着control...原创 2019-02-12 16:38:11 · 365 阅读 · 0 评论 -
Android进阶知识(二):Activity启动模式进阶之多任务栈与Flags
Android进阶知识(六):Activity启动模式进阶之多任务栈与Flags一、Activity启动模式进阶之多任务栈在笔记Android基础知识(三):Android四大组件简介中曾经提到过,Android系统是一个多任务的操作系统,而任务即为Activity中的栈,由一个或多个Activity组成。在基础知识的笔记中提到的Activity返回栈,除了特殊的singleInstance...原创 2019-05-07 17:07:57 · 1399 阅读 · 0 评论 -
Android进阶知识(三):Android IPC简介与Android的多进程模式
Android进阶知识(N):Android IPC简介与Android的多进程模式一、Android IPC简介IPC是Inter-Process Communication的缩写,含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程。对于进程和线程的区别这里不多做介绍。Android虽然是一种基于Linux内核的移动操作系统,但是其进程间通信方式并不完全继承自Linux,相...原创 2019-05-08 17:00:56 · 249 阅读 · 2 评论 -
Android进阶知识(四):IPC基本概念之序列化机制
Android进阶知识(N+1):IPC基本概念之序列化机制IPC中的基础概念主要包含三方面内容:Serializable接口、Parcelable接口以及Binder,理解了IPC的基础概念之后才能理解跨进程通信的各种方式。其中Seralizable接口和Parcelable接口可以完成对象的序列化过程。当需要通过Intent和Binder传输数据时就需要使用Parcelable或者Seral...原创 2019-05-09 09:05:49 · 208 阅读 · 0 评论 -
Android进阶知识(五):IPC基本概念之Binder、Binder工作机制及其原理
Android进阶知识(五):IPC基本概念之Binder、Binder工作机制及其原理 Binder是一个很深入的话题——任玉刚老师如是说。就笔者的水平而言,实际上从任玉刚老师的《艺术探索》中读完从AIDL代码中去解析其工作机制,确实可以理解。但是笔者在这不会老套照搬代码,介绍其工作机制时只是必要的些许代码,不会整个代码文件上,有兴趣的读者可以阅读该书,按照书的步骤走即可。一、Binde...原创 2020-04-09 16:36:57 · 425 阅读 · 0 评论 -
Android进阶知识(六):IPC方式及其适用场景
Android进阶知识(六):IPC方式及其适用场景 这一篇将简单的介绍关于Android中的IPC方式,但对于这些方式如何实现的不做详细介绍,读者可以看《Android艺术开发探索》或者查看相应博客。笔者想要做一只知识帮运的快乐肥柴,而不是代码帮运的无聊肥柴。一、Android中的IPC方式 Android中IPC的方式有很多:通过Intent中附加extras来传递信息、通过共享文...原创 2020-04-12 16:10:59 · 1364 阅读 · 0 评论 -
Android进阶知识(七):Binder连接池
Android进阶知识(七):Binder连接池 笔者不要做一只搬运代码的无聊肥柴。(啪啪啪,啊,好疼) 为了介绍Binder连接池,笔者感觉还是得介绍Binder连接池的实现,不然就只有工作原理没有代码实现介绍,感觉过意不去(懒的话还是可以直接贴链接的,但想想还是自己写好了)。一、Binder连接池的工作原理 在AIDL的实现中,其大致流程为:首先创建一个Service和一个AI...原创 2020-04-18 15:24:21 · 503 阅读 · 0 评论 -
Android进阶知识(八):View基础知识
Android进阶知识(七):View的事件体系开启篇——View基础知识View是Android中所有控件的基类,是一种界面层的控件的一种抽象,它代表了一个控件。除了View,还有ViewGroup,其内部可以包含多个控件,即一组View。在Android的设计中,ViewGroup也继承了View,这就意味着View本身就可以是单个控件也可以是由多个控件组成的一组控件,通过这种关系形成了Vi...原创 2019-05-10 13:26:06 · 329 阅读 · 0 评论 -
Android进阶知识(九):View的滑动和弹性滑动
Android进阶知识(八):View的滑动和弹性滑动Android中常见的实现View的滑动的三种方式:第一种是通过View本身提供的scrollTo/scrollBy方法来实现滑动;第二种是通过动画给View施加平移效果来实现滑动;第三种是通过改变View的LayoutParams使得View重新布局从而实现滑动。以上提到的三种滑动方式都是非弹性滑动,无法实现渐近式滑动(弹性滑动),用户...原创 2019-05-10 15:35:26 · 973 阅读 · 4 评论 -
Android进阶知识(十):View的事件分发机制
Android进阶知识(十):View的事件分发机制 这一篇章中,笔者将介绍View的事件分发机制,需要提及的是,View的事件分发机制是View事件体系中极其重要的一点。以下对View的事件分发机制的解析,都是基于源代码的基础上进行的总结与分析,若有兴趣的读者可以通过《Android开发艺术探索》一书阅读任玉刚老师是如何通过源码来解释以下内容的,笔者就不完全照搬了。一、点击事件的传递规则...原创 2020-04-23 16:49:56 · 703 阅读 · 1 评论 -
Android进阶知识(十一):View的滑动冲突
Android进阶知识(十一):View的滑动冲突 在界面中只要内外两层同时可以滑动,这个时候就会产生滑动冲突。以下内容将对View的滑动冲突常见情景,以及如何解决滑动冲突进行解析。一、常见的滑动冲突场景 常见的滑动冲突场景可以简单的分为以下三种(三种场景的图示如下图所示):场景1——外部滑动方向和内部滑动方向不一致;场景2——外部滑动方向和内部滑动方向一致;场景3——上面两种情...原创 2020-04-25 15:05:13 · 249 阅读 · 0 评论 -
Android进阶知识(十二):View的工作原理之基本概念
Android进阶知识(十二):View的工作原理之基本概念 从这一篇章开始,笔者将介绍关于View的工作原理与自定义View的相关内容。在介绍View的工作原理(三大流程)之前,读者有必要了解一些基本概念。一、Activity的视图层结构 在ActivityThread中,当Activity对象被创建完毕之后,会将DecorView添加到Window中。Window是一个抽象类,其唯一...原创 2020-04-29 16:41:35 · 205 阅读 · 0 评论 -
Android进阶知识(十三):View的工作流程之measure过程
Android进阶知识(十三):View的工作流程之measure过程 View的工作流程主要是指measure、layout、draw这三大流程,即测量、布局和绘制,其中measure确定View的测量宽/高,layout确定View的最终宽/高和四个顶点的位置,而draw则将View绘制在屏幕上。 measure过程要分情况来看,如果只是一个原始的View,那么通过measure方法...原创 2020-04-30 15:20:20 · 269 阅读 · 0 评论 -
Android进阶知识(十四):View的工作流程之Layout过程和Draw过程
Android进阶知识(十四):View的工作流程之Layout过程和Draw过程一、Layout过程 Layout过程的作用是ViewGroup用来确定子元素的位置,当ViewGroup的位置被确定后,它在onLayout方法中会遍历所有子元素并调用其layout方法,在layout方法中onLayout方法又会被调用。 Layout过程比Measure过程简单,layout方法确定V...原创 2020-04-30 16:20:37 · 253 阅读 · 0 评论 -
Android进阶知识(十五):自定义View的那些事
Android进阶知识(十五):自定义View的那些事 这一篇章,笔者并不打算介绍如何自定义View,毕竟诸如此类的博客众多,而且从笔者前几篇对View的层次结构、事件分发机制以及工作原理的介绍,对自定义View的实现所涉及的技术都有一定的了解了。这一篇,笔者将简单的介绍以下自定义View的分类以及需要注意的地方。一、自定义View的分类 自定义View的分类标准不唯一,这里将自定义Vi...原创 2020-05-07 14:31:42 · 130 阅读 · 0 评论 -
Android进阶知识(十六):理解RemoteViews
Android进阶知识(十六):理解RemoteViews一、RemoteViews及其应用 RemoteViews表示的是一个View结构,一种远程View,它可以在其它进程中显示,由于它在其他进程中显示,为了能够更新它的界面,RemoteViews提供了一组基础的操作用于跨进程更新它的界面。 RemoteViews在Android中的使用场景有两种:通知栏和桌面小部件。 通知栏主...原创 2020-05-07 16:30:46 · 644 阅读 · 0 评论 -
Android进阶知识(十七):Android的Drawable
Android进阶知识(十七):Android的Drawable一、Drawable简介 Drawable表示的是一种可以在Canvas上进行绘制的抽象的概念,其种类很多,最常见的颜色和图片都可以是一个Drawable。 在实际开发中,Drawable常被用来作为View的背景使用。Drawable一般通过XML定义,如我们最经常接触的在项目的目录app\src\main\res\drawable下就是XML定义的Drawable。同样可以通过代码来创建具体的Drawable对象,只是稍微复杂。原创 2020-05-09 14:32:06 · 312 阅读 · 0 评论 -
Android进阶知识(十八):View动画、帧动画与View动画的特殊应用
Android进阶知识(十八):View动画、帧动画与View动画的特殊应用 Android的动画可以分为三种:View动画、帧动画和属性动画,其实帧动画也属于View动画的一种,只不过它和平移、旋转等常见的View动画在表现形式上略有不同。一、View动画 View动画作用对象为View,其通过对场景里的对象不断做图形变换(平移、旋转、缩放、透明度)从而产生动画效果,它是一种渐近式动画,并且View动画支持自定义。View动画的种类 View动画的四种变换效果对应着Animation的原创 2020-05-12 11:52:29 · 128 阅读 · 0 评论 -
Android进阶知识(十九):属性动画及动画使用注意事项
Android进阶知识(十九):属性动画及动画使用注意事项 View动画只能支持四种简单操作,除此之外View动画一个最大的缺陷:只是改变View的显示效果,并不会真正的改变View的属性。具体来说:例如屏幕左上角有一个Button,使用View动画将其移动到右下角,此刻点击右下角的Button,其绝对不会响应点击事件,而在左上角原位置则会响应。 为此,在API11的时候加入了新特性——属性动画,它对作用对象进行了扩展,属性动画可以对任何对象做动画,甚至可以没有对象。一、属性动画使用 属性动原创 2020-05-22 17:01:10 · 791 阅读 · 0 评论 -
Android进阶知识(二十):理解Window和WindowManager
Android进阶知识(二十):理解Window和WindowManager Window表示一个窗口的概念,其实际上是View的直接管理者;它是一个抽象类,具体实现是PhoneWindow。Window的创建可以通过WindowManager来完成,WindowManager是外界访问Window的入口,Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService的交互是一个IPC过程。一、Window和WindowMan原创 2020-05-25 17:18:17 · 305 阅读 · 0 评论 -
Android进阶知识(二十一):Window的创建过程
Android进阶知识(二十一):Window的创建过程 View是Android中的视图呈现方式,但是View不能单独存在,它必须依附于Window,因此有视图的地方就有Window。这一篇章笔者将分析Activity、Dialog以及Toast的Window的创建过程,加深对Window的理解。一、Activity的Window创建过程 Activity中的Window创建过程涉及到Activity的启动过程(后续介绍),Activity的启动过程很复杂,最终会由ActivityThread中原创 2020-05-26 16:37:58 · 723 阅读 · 0 评论 -
Android进阶知识(二十二):Android的消息机制
Android进阶知识(二十二):Android的消息机制一、Android的消息机制概述 Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑。MeeageQueue、Looper以及ThreadLocal的描述如下表。类描述MessageQueue消息队列,采用单链表的数据结构存储,内部存储了一组消息,以队列形式对外提供插入和删除工作。Looper消息循环,Looper以无限循环的形式去原创 2020-05-28 17:19:18 · 364 阅读 · 0 评论 -
Android进阶知识(二十三):Android的线程
Android进阶知识(二十三):Android的线程 线程是Android的一个重要概念,从用途来说,线程分为主线程和子线程。线程作用主线程进程所拥有的线程,在Java中默认情况下一个进程只有一个线程,即为主线程。主线程主要处理界面交互相关的逻辑,在任何时候都必须有较高的响应速度,因此主线程中不能执行耗时任务子线程也叫工作线程,用于执行耗时操作,除了主线程之外的线程都是子线程 Android沿用了Java的线程模型,其中的线程也分为主线程和子线程,其中主线程也叫原创 2020-05-29 16:11:13 · 609 阅读 · 0 评论 -
Android进阶知识(二十四):Android的线程池
Android进阶知识(二十四):Android的线程池 相比于线程,线程池有三点优点: ① 重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销。 ② 能有效控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的阻塞现象。 ③ 能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能。 Android中的线程池真正实现是ThreadPoolExecutor,其提供一系列参数配置线程池。从功能特性上,Android的线程池有4类,以下进行介绍。一、Thr原创 2020-05-29 18:05:04 · 185 阅读 · 0 评论 -
Android进阶知识(二十五):Bitmap简介及其高效加载
Android进阶知识(二十五):Bitmap简介及其高效加载一、Bitmap Bitmap代表一个位图,在Android中指的是一张图片,可以是png、jpg等格式的图片。BitmapDrawable里封装的图片就是Bitmap对象。Bitmap的创建 在Bitmap类中,Bitmap的构造方法是默认权限,因此开发者无法通过new来创建一个Bitmap对象。Bitmap提供了静态方法createBitmap用于创建Bitmap对象,这些方法可以分为4类(Android API 29)。原创 2020-06-01 15:43:33 · 512 阅读 · 0 评论 -
Android进阶知识(二十六):Android中的缓存策略
Android进阶知识(二十六):Android中的缓存策略 缓存策略在Android中有着很广泛的使用场景,尤其在图片加载的情景下,缓存策略更为重要。在图片加载的情景下,缓存的目的在于提高程序的效率,同时解决不必要的流量开销的问题。 缓存策略没有统一的标准,其主要包括缓存的添加、获取和删除三类操作。那缓存为何需要删除呢? 关键在于不管是内存缓存还是存储设备缓存,它们的缓存大小都是有限制的,当缓存容量已满,但是程序还需要添加缓存,这就需要删除旧的缓存添加新的缓存,而如何定义缓存的新旧就是一种策原创 2020-06-02 15:21:41 · 676 阅读 · 0 评论 -
Android进阶知识(二十七):Activity的启动过程
Android进阶知识(二十七):Activity的启动过程 Activity组件的主要作用是展示一个界面并和用户交互,其扮演的是一个前台界面的角色。关于Activity启动的触发(Intent)以及相关的启动模式等,笔者在Android基础知识(五):Activity的生命周期、Android基础知识(六):Activity的启动模式、Android基础知识(七):Activity互调之间的生命周期变化与onNewIntent()触发机制以及Android进阶知识(二):Activity启动模式进阶之原创 2020-06-07 21:43:31 · 614 阅读 · 0 评论 -
Android进阶知识(二十八):Service的工作过程
Android进阶知识(二十八):Service的工作过程 Service是一种计算型组件,用于在后台执行一系列计算任务。Service分为两种工作状态:启动状态——主要用于执行后台计算;绑定状态——主要用于其他组件和Service的交互。需要注意的是,Service的两种状态可以共存。 笔者将对Service的两种状态工作过程进行介绍,这里笔者用的是Android 10.0的源码,但是同上一篇笔记:Android进阶知识(二十七):Activity的启动过程不一样,用于管理Service的为依旧是原创 2020-06-10 16:05:43 · 387 阅读 · 0 评论 -
Android进阶知识(二十九):BroadcastReceiver的工作过程
BroadcastReceiver是一种消息型组件,。BroadcastReceiver的工作过程主要包含两个方面,一个是广播的注册过程,另一个是广播的发送和接收过程。原创 2020-06-11 12:01:33 · 330 阅读 · 0 评论 -
Android进阶知识(三十):ContentProvider的工作过程
Android进阶知识(三十):ContentProvider的工作过程 ContentProvider是一种数据共享型组件,用于向其他组件乃至其他应用共享数据。需要注意的是ContentProvider内部的insert、delete、update和query方法需要处理好线程同步,因为这几个方法是在Binder线程池中被调用的,另外ContentProvider组件不需要手动停止。一、ContentProvider的启动过程 当ContentProvider所在进程启动时,ContentPro原创 2020-06-11 16:49:45 · 445 阅读 · 0 评论 -
Android进阶知识(三十一):Android性能优化
Android进阶知识(三十一):Android性能优化 Android设备作为一种移动设备,不管内存还是CPU的性能都受到了一定的限制,这意味着Android程序不可能无限制地使用内存和CPU资源,过多地使用内存会导致程序内存溢出,即OOM。而过多地使用CPU资源,一般指做大量的耗时任务,会导致手机变得卡顿甚至程序无响应,即ANR。 最后这个专题,笔者将总结一些Android性能优化的方法,主要内容包括布局优化、绘制优化、内存泄漏优化、响应速度优化、ListView优化、Bitmap优化、线程优原创 2020-06-12 16:11:05 · 430 阅读 · 0 评论