From b16737fc58c9f6de06d01afa1d10ac62385e47b3 Mon Sep 17 00:00:00 2001 From: Omooo <869759698@qq.com> Date: Wed, 13 Mar 2019 11:11:51 +0800 Subject: [PATCH] update Observer --- .../Android 系统显示原理.md | 27 ++++++ blogs/DesignMode/观察者模式.md | 92 ++++++++++++++++++- 2 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 blogs/Android/性能优化/Android 系统显示原理.md diff --git a/blogs/Android/性能优化/Android 系统显示原理.md b/blogs/Android/性能优化/Android 系统显示原理.md new file mode 100644 index 0000000..f5b7d59 --- /dev/null +++ b/blogs/Android/性能优化/Android 系统显示原理.md @@ -0,0 +1,27 @@ +--- +Android 系统显示原理 +--- + +#### 目录 + +1. 思维导图 +2. 概述 +3. 绘制原理 +4. 刷新机制 +5. 卡顿的根本原因 + +#### 思维导图 + +#### 概述 + +Android 的显示过程可以简单的概括为:Android 应用程序把经过测量、布局、绘制后的 surface 缓存数据,通过 SurfaceFlinger 把数据渲染到显示屏幕上,通过 Android 的刷新机制来刷新数据。也就是说应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要绘制的数据传递到系统层服务,系统层服务通过刷新机制把数据更新到屏幕。 + +Android 的图形显示系统采用的是 CS 架构。SurfaceFlinger(Server)由 C++ 代码编写,Client 端代码分为两部分,一部分是由 Java 提供给应用使用的 API,另一部分则是由 C++ 写成的底层具体实现。 + +#### 绘制原理 + + + +#### 刷新机制 + +#### 卡顿原因 \ No newline at end of file diff --git a/blogs/DesignMode/观察者模式.md b/blogs/DesignMode/观察者模式.md index e0ef498..b6c46cd 100644 --- a/blogs/DesignMode/观察者模式.md +++ b/blogs/DesignMode/观察者模式.md @@ -6,8 +6,9 @@ 1. 思维导图 2. 概述 -3. 具体实现 -4. 参考 +3. 常见实现例子 +4. 具体实现 +5. 参考 #### 思维导图 @@ -15,6 +16,14 @@ 观察者模式定义了对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并自动更新。它的最重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小。 +#### 常见实现例子 + +1. 常见的发布订阅模式 +2. ListView 的 Adapter 的 notifyDataSetChanged +3. BroadcastReceiver +4. EventBus +5. RxJava + #### 具体实现 首先定义一个观察者的接口: @@ -45,6 +54,83 @@ public class Observer2 implements Observer { } ``` +在创建一个被观察者对象接口: + +```java +public interface Subject { + /** + * 添加观察者 + */ + void add(Observer observer); + /** + * 删除观察者 + */ + void delete(Observer observer); + /** + * 通知所有观察者 + */ + void notifyAllObservers(); + /** + * 自身的操作 + */ + void operation(); +} +``` + +抽象主题: + +```java +public abstract class AbstractSubject implements Subject { + + private Vector vector = new Vector<>(); + + @Override + public void add(Observer observer) { + vector.add(observer); + } + + @Override + public void delete(Observer observer) { + vector.remove(observer); + } + + @Override + public void notifyAllObservers() { + Enumeration enumeration = vector.elements(); + while (enumeration.hasMoreElements()) { + enumeration.nextElement().onUpdate(); + } + } +} +``` + +具体的观察者对象: + +```java +public class MySubject extends AbstractSubject { + @Override + public void operation() { + System.out.println("执行更新!"); + notifyAllObservers(); + } +} +``` + +测试: + +```java +public class ObserverTest { + public static void main(String[] args) { + MySubject mySubject = new MySubject(); + mySubject.add(new Observer1()); + mySubject.add(new Observer2()); + mySubject.operation(); + } +} +``` + + +#### 参考 -#### 参考 \ No newline at end of file +[Observer(观察者模式)](https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode/blob/master/article/design_patterns/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-Observer.md) \ No newline at end of file