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);
}
}
}
将代码改为以上形式之后,就算完成了

android 观察者模式的更多相关文章

  1. Android观察者模式的简单实现demo

    观察者模式就是:当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新. 下面介绍一种简单的使用方法,(下面有demo链接)先看一下project的目录构成: ObserverList ...

  2. Android使用的设计模式1——观察者模式

    设计模式,对程序员来说是一个坎,想在程序员这条路走得更远,设计模式是你的必修课.从大学时代接触GoF到工作几年后重新看设计模式,每次感觉都不一样.这次想借着分析Android Framework源码的 ...

  3. Android 设计模式 之 观察者模式

    /* * 观察者模式 *      定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的 * 对象都得到通知并被自动更新 * * 当然, ...

  4. android中的所谓观察者模式

    生活中我们常认定某些人很有才,但什么是有才呢?明朝的王守仁曾这样解释:才,是所谓天理,应用到物上,便成了才.凡事凡物,只要掌握了所谓科学的方法,并能灵活运用,那么你也可以成为一个有才的人. 观察者模式 ...

  5. Android设计模式系列--观察者模式

    观察者模式,是一种非常常见的设计模式,在很多系统中随处可见,尤其是涉及到数据状态发生变化需要通知的情况下.本文以AbstractCursor为例子,展开分析.观察者模式,Observer Patter ...

  6. Android 设计模式之观察者模式(转载自:“http://blog.csdn.net/fangchongbory/article/details/7774044”)

    /* * 观察者模式 *      定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的 * 对象都得到通知并被自动更新 * * 当然, ...

  7. Android中观察者模式的升入理解

    以前对Java中的观察者模式只知道一点皮毛,在接触Android的过程中,逐渐认识到观察者模式是如此的重要,android中许多地方都用到了观察者模式例如ContentResolver操作,来总结一下 ...

  8. Android IPC机制—跨进程的观察者模式

    在AIDL文件中并不是所有的数据类型都可以使用,AIDL支持的数据类型如下: 基本数据类型(int.long.char.boolean.double等) String和CharSequence Lis ...

  9. Android短信过滤项目中的观察者模式

    观察者模式: 观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新. 观察者模式提供了一种对象设计, 让主题和观察者之间松耦合.主题只知道观察者实现了某个接 ...

随机推荐

  1. VS调试时下不到断点的处理方式。

    调试无法命中断点的情况我想很多人遇到过,反正我是遇到过很多次了,有时候是没有生成项目或解决方案,有时候是调试版本不一致. 当然还有其他的情况都已经忘记如何处理的了. 今天在release模式下要调试代 ...

  2. Github Atom 1.12.0-beta3 发布

    Github Atom 1.12.0-beta3 发布了,Atom 是 Github 专门为程序员推出的一个跨平台文本编辑器.具有简洁和直观的图形用户界面,并有很多有趣的特点:支持CSS,HTML,J ...

  3. tar命令的使用

    tar格式,会打包成一个文件,可以对多个目录,或者多个文件进行打包 tar命令只是打包,不会压缩,打包前后大小是一样的 tar命令 -c    //打包 -x    //解压 -f    //指定文件 ...

  4. Spring Security 从配置入门 学习讲解。刽子手------------securityConfig.xml

    不知道我的web.xml 大家都理解了没.  废话确实有点多,可能很多知识点,大家都知道,可是我学的时候,压根什么都不懂啊.... 这篇我们要讲刽子手  securityConfig. 为什么要说他是 ...

  5. 新篇章,Golang 和 beego 初识

    beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API.Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado.sinatra ...

  6. pointer to function

    指针.函数.数字.结构体.指针函数.函数指针 初学不好区分,做点儿实验来有效区分一下,以下代码采用dev-C++平台测试 //pointer to fucntion 函数功能是 基地址加偏移量得到偏移 ...

  7. 【转】Duff's Device

    在看strcpy.memcpy等的实现发现用了内存对齐,每一个word拷贝一次的办法大大提高了实现效率,参加该blog(http://totoxian.iteye.com/blog/1220273). ...

  8. 硬件初始化,nand flash固化操作,系统启动简单流程

    2015.3.27星期五 晴 链接脚本定义代码的排放顺序 硬件系统初始化:一:arm核初始化:(里面有指令)初始化ARM核的时候需要看arm核的手册指令:1.异常向量(最起码有个复位异常,初始化模式- ...

  9. Nginx配置指定媒体类型文件强制下载

    由于业务需要,在点击显示链接(如www.xxx.com/2015-01-15/xxx.png)显示媒体资源(如图片.视频.音频.文档),而在点击下载链接(如www.xxx.com/2015-01-15 ...

  10. MAC下如何显示隐藏文件

    1.在终端上输入以下命令 defaults write com.apple.finder AppleShowAllFiles -bool true 2.重新启动Finder Command + Opt ...