android 观察者模式

1:观察者模式:

1:使用场景:一般使用在自定义控件的事件点击监听上面(或者封装方法进行回调)

2:写观察者模式步骤:

(1):声明一个接口

(2):接口里面封装一个抽象方法

(3):需要封装一个方法,方法的参数就是接口类的实例化(用来设置监听)

(4):声明接口类的实例化对象

(5):接口实例化对象调用抽象方法

接口回调实现方式:

(1):观察者模式

(2):抽象类

1:抽象类与接口的区别:

(1):默认的方法实现

抽象类可以有默认的方法,接口完全是抽象的。它根本不存在方法的实现

(2): 实现

抽象类:子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现

接口:子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现

(3):构造器

抽象类:抽象类可以有构造函数

接口:接口不能有构造函数

(4):与正常Java类的区别

抽象类:除了你不能实例化抽象类之外,它和普通Java类没有任何区别

接口:接口是完全不同的类型

(5):访问修饰符

抽象类:抽象方法可以有public、protected和default这些修饰符

接口:接口方法默认修饰符是public。你不可以使用其它修饰符

(6):main方法

抽象类:抽象方法可以有main方法并且我们可以运行它

接口:接口没有main方法,因此我们不能运行它。

(7):多继承

抽象类:抽象方法可以继承一个类和实现多个接口(单继承)

接口:接口只可以实现一个或多个其它接口(多实现)

(8): 速度

抽象类:它比接口速度要快

接口:接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。

(9):添加新方法

抽象类:如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。

接口:如果你往接口中添加方法,那么你必须改变实现该接口的类

2: public,private,protected,default四种修饰符的作用范围:

(1): public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用

(2):private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用(在相同的包下,不同的类中是不可以访问其他类中的private修饰的方法的)

(3):protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。(同一个包下的都可以调用,不同包下面的调用不了)

(4):default 则在包内包外的子类都可见

private 本类中 其子类和其他都不能调用

protected 本类,相同包下面的类,子类能调用 其他不能

public 本package都能调用

default 本类,相同包中能调用 其他不能调用

3:自定义控件

1:继承view

2:重写OnDraw,onMesure,onLayout

3进行绘制

(1):声明画笔

(2):设置画笔属性(包括颜色和宽度和是不是空心圆和设置抗锯齿)

(3):绘制圆

4:设置监听

(1):重写onTouchEvent方法

(2):获取点击坐标(x,y)

(3):进行计算

(4):如果在范围内就点击控件

4:内存泄露会造成oom吗?

内存泄露多了就会造成oom.

内存泄露的危害:

只有一个,那就是虚拟机占用内存过高,导致OOM(内存溢出)

使用Handler导致内存泄露的解决方法

方法一:通过程序逻辑来进行保护。

1.在关闭Activity的时候停掉你的后台线程。线程停掉了,就相当于切断了Handler和外部连接的线,Activity自然会在合适的时候被回收。

2.如果你的Handler是被delay的Message持有了引用,那么使用相应的Handler的removeCallbacks()方法,把消息对象从消息队列移除就行了。

方法二:将Handler声明为静态类。

静态类不持有外部类的对象,所以你的Activity可以随意被回收。代码如下:

static class MyHandler extends Handler {

@Override

public void handleMessage(Message msg) {

mImageView.setImageBitmap(mBitmap);

}

}

但其实没这么简单。使用了以上代码之后,你会发现,由于Handler不再持有外部类对象的引用,导致程序不允许你在Handler中操作Activity中的对象了。所以你需要在Handler中增加一个对Activity的弱引用(WeakReference):

static class MyHandler extends Handler {

WeakReference<Activity > mActivityReference;

MyHandler(Activity activity) {

mActivityReference= new WeakReference<Activity>(activity);

}

@Override

public void handleMessage(Message msg) {

final Activity activity = mActivityReference.get();

if (activity != null) {

mImageView.setImageBitmap(mBitmap);

}

}

}

将代码改为以上形式之后,就算完成了

时间: 2024-10-27 19:32:04

android 观察者模式的相关文章

观察者模式在android 上的最佳实践

在上一篇文章中介绍了介绍了观察者模式的定义和一些基本概念,观察者模式在 android开发中应用还是非常广泛的,例如android按钮事件的监听.广播等等,在任何类似于新闻-订阅的模式下面都可以使用.从某种意义上面来说android有点像JAVA EE的WEB页面,在都需要提供View层用于进行操作,在多个页面之间传递数据发送通知都是一件很麻烦的事情. 在android中从A页面跳转到B页面,然后B页面进行某些操作后需要通知A页面去刷新数据,我们可以通过startActivityForResul

android设计模式之--观察者模式

最近比较忙,好久没有更新博客了,今天就将最近研究的一个东西总结一下,最近在维护公司的一个项目,我负责的模块主要是下载杂志后及时的更新UI,将最新的下载进度更新到UI上,中间遇到的一个问题是:同一个对象的下载进度会有多个Item监听它的状态,也就是说一个进度要更新到多个Item上,开始没有什么头绪,百度一番后发现了观察者模式这个东西,它就是为了满足这种一对多问题而出现的. 有了思路以后,就着手开始了解观察者模式是如何工作的,虽然以前知道设计模式里有这个东西,但还真是没用过,下面就讲解一下观察者模式

观察者模式 android 更新UI

原来的网址:http://malong26.iteye.com/blog/1858724 android的app程序退出有几种方式:activity队列方式.广播方式.在这里介绍一下我实现该功能的方式--观察者模式.     方法的大概思路为:建立Activity基类,实现观察者接口,实现监听方法,finish掉本实例:在Application里面单例一个目标对象,当需要关闭程序的时候,调用目标对象的通知方法,通知所有观察者.     代码如下: 观察者接口 Java代码   public in

Android 设计模式之观察者模式

观察者设计模式的定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 面向对象设计原则:为交互对象之间的松耦全设计而努力 在我们实际应用中,还会遇到一对一.或者多对一的情况.一对一就是,一个目标对应一个观察者.多对一是指多个目标对应一个观察者. 松耦合的好处: 一.是它适应变化的灵活性: 二.是当某个服务的内部结构和实现逐渐发生改变时,不影响其他服务 它的类图 观察者模式在Android系统中的应用还是相当广泛的,如监听器 public voi

Android 设计模式情景分析——观察者模式

观察者模式是一种使用频率非常高的模式,有时也被称作发布/订阅模式,属于行为型模式,它最常用的是 GUI 系统.订阅--发布系统,它一个重要作用就是解耦,使得它们之间的依赖性更小.观察者模式定义了对象间一种一对多的依赖关系,使得每当一个对象改变状态时,则所有依赖于它的对象都会得到通知并被自动更新. 1.观察者模式的使用情景 关联行为场景:事件多级触发场景:跨系统的消息交换场景(如消息队列.事件总线的处理机制). 2.程序中使用观察者模式的优缺点 - 观察者模式 优点 观察者和被观察者之间是耦合抽象

当观察者模式和回调机制遇上Android源码

上一篇博客跟大家分享了Android源码中的装饰者模式,有点意犹未尽,今天跟大家分享下Android中的观察者模式,顺便说一说观察者模式和回调机制的关系,欢迎大家拍砖. 观察者模式 定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 观察者模式的结构 观察者模式所涉及的角色有: 抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对

[Android&amp;amp;Java]浅谈设计模式-代码篇:观察者模式Observer

观察者,就如同一个人,对非常多东西都感兴趣,就好像音乐.电子产品.Game.股票等,这些东西的变化都能引起爱好者们的注意并时刻关注他们.在代码中.我们也有这种一种方式来设计一些好玩的思想来.今天就写个Demo来描写叙述一下这种思想,用java内置的Observer来实现这一思想. 好,程序猿是不善言语的,看代码先. 1.demo的结构: 2.先创建我们的主题类Subject,他就是我们本demo的明星类.继承了Observable,顾名思义,就是被观察的类 .其它观察者对他但是虎视眈眈哦(事实上

通过Android源码分析再探观察者模式(二)

接着上篇文章,现在在通过Android实际开发和源码再探观察者模式,listview是我们日常开发中必用的控件,虽然之前就有listview的替代品(recyclerview),现在不去深究两个控件到底谁好谁差,但有一点需要强调下,它们之间有一大相同点,都是通过观察者模式去实现数据更新. 首先,我们先去看一个简单的例子 /** * * created by zero on2016-6-1 * * 通过listview再探观察者模式 * */ public class MainActivity e

观察者模式在Android开发场景中运用之通过Java源码分析(一)

对于观察者,很多开发者并不陌生,在日常开发过程中,这也是一个非常常见的设计模式,尤其是Android小伙伴,很多人都知道broadcast就是一个典型的观察者模式,还有最近很火的rxjava,响应式编程中,观察者模式扮演着一个很重要的角色,但观察者模式具体是怎么样运转的,部分小伙伴就有点模糊了. 先从日常生活中一个例子开始说起,在看电视的过程中,我们经常看到一些抗日神剧中有这么一个剧情,鬼子进村,在进村的过程中,总会有一些一些人通风报信,然后通知村里的人能躲的躲,能藏的藏,能跑的跑,或者中路再搞