observerandroid
‘壹’ android设计模式中的观察者模式能说一下吗
java">/*
*观察者模式
*定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的
*对象都得到通知并被自动更新
*
*当然,MVC只是Observer模式的一个实例。Observer模式要解决的问题为:
*建立一个一(Subject)对多(Observer)的依赖关系,并且做到当“一”变化的时候,
*依赖这个“一”的多也能够同步改变。最常见的一个例子就是:对同一组数据进行统计分析时候,
*我们希望能够提供多种形式的表示(例如以表格进行统计显示、柱状图统计显示、百分比统计显示等)。
*这些表示都依赖于同一组数据,我们当然需要当数据改变的时候,所有的统计的显示都能够同时改变。
*Observer模式就是解决了这一个问题。
*
*适用性:
*1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面
*将这两者封装成独立的对象中以使它们可以各自独立的改变和服用
*
*2.当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变
*
*3.当一个对象必须通知其它对象,而它又不能假定其它对象是谁
*
*参与者:
*1.Subject(目标)
*目标知道它的观察者,可以有任意多个观察者观察同一个目标
*提供注册和删除观察者对象的接口
*
*2.Observer(观察者)
*为那些在目标发生改变时需获得通知的对象定义个更新的接口
*
*3.ConcreteSubject(具体目标)
*将有关状态存入各ConcreteObserver对象
*当它的状态发送改变时,向它的各个观察者发出通知
*
*4.ConcreteObserver(具体观察者)
*维护一个指向ConcreteObserver对象的引用
*存储有关状态,这些状态应与目标的状态保持一致
*实现Observer的更新接口是自身状态与目标的状态保持一致
*
*
**/
‘贰’ android源码里哪些地方用到了观察者模式
1. Subject被观察者。是一个接口或者是抽象类,定义被观察者必须实现的职责,它必须能偶动态地增加、取消观察者,管理观察者并通知观察者。
2. Observer观察者。观察者接收到消息后,即进行update更新操作,对接收到的信息进行处理。
3. ConcreteSubject具体的被观察者。定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知。
4. ConcreteObserver具体观察者。每个观察者在接收到信息后处理的方式不同,各个观察者有自己的处理逻辑。
观察者模式有什么优点呢:
观察者和被观察者之间是抽象耦合的,不管是增加观察者还是被观察者都非常容易扩展。
根据单一职责原则,每个类的职责是单一的,那么怎么把各个单一的职责串联成真实的复杂的逻辑关系呢,观察者模式可以起到桥梁作用。
观察者模式是松耦合的典型。
在Android源码中,其中一个经典的使用到观察者模式的就是Android控件的事件监听模型。
‘叁’ android packageinstallobserver为什么没这个类
.Stub{
publicvoidpackageInstalled(StringpackageName,intreturnCode){
Messagemsg=mHandler.obtainMessage(INSTALL_COMPLETE);
msg.arg1=returnCode;
mHandler.sendMessage(msg);
}
};
你看看这里,地址:http://blog.csdn.net/connectionutils/article/details/8224179 《求不封》
求采纳
‘肆’ android中获得控件的位置(相对于布局文件)
正确的代码如下所示
TextViewtv=(TextView)findViewById(R.id.text);
tv.getViewTreeObserver().addOnGlobalLayoutListener(newOnGlobalLayoutListener(){
@Override
publicvoidonGlobalLayout(){
//这里执行获取位置大小操作
intleft=tv.getLeft();
inttop=tv.getTop();
intbottom=tv.getBottom();
intright=tv.getRight();
//tv相对于父布局的坐标就得出来了
}
}
view的位置和大小是通过onLayout和onMeasure方法计算出来的,执行到activity的onCreate()方法时,尚未开始计算控件的大小和位置,所以是取不到的
OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer),在视图树的全局事件改变时得到通知
除了OnGlobalLayoutListener ,ViewTreeObserver还有如下内部类:
interfaceViewTreeObserver.OnGlobalFocusChangeListener
当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnGlobalLayoutListener
当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnPreDrawListener
当一个视图树将要绘制时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnScrollChangedListener
当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnTouchModeChangeListener
当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类
‘伍’ android 数据库怎么监听数据变化
在android中经常会用到改变数据库内容后再去使用数据库更新的内容,很多人会重新去query一遍,但是这样的问题就是程序会特别占内存,而且有可能会搂关cursor而导致程序内存未释放等等。其实android内部提供了一种ContentObserver的东西来监听数据库内容的变化。
ContentObserver的构造函数需要一个参数Hanlder,因为ContentObserver内部使用了一个实现Runnable接口的内部类NotificationRunnable,来实现数据库内容的变化。需要使用hanlder去post消息。注册ContentObserver的方法是:getContentResolver().registerContentObserver(uri, notifyForDescendents, observer).
上面3个参数为:uri----Uri类型,是需要监听的数据库的uri.
notifyForDescendents---boolean true的话就会监听所有与此uri相关的uri。false的话则是直接特殊的uri才会监听。一般都设置为true.
observer-----ContentObserver 就是需要的contentobserver.
初始化一个ContentObserver对象,重载onChange(boolean ),在这个方法里去操作数据库的使用,针对变化后的使用。
‘陆’ 安卓rxjava怎么将实体类转换为observer
在开始说代码之前,先澄清几个概念。RxJava最核心的东西就是Observable和Observer。Observable会发出数据,而与之相对的Observer则会通过订阅Observable来进行观察。Observer可以在Observable发出数据、报错或者声明没有数据可以发送时进行相应的操作。这三个操作被封装在Observer接口中,相应的方法为onNext(),onError()和onCompleted()。明确了这些概念以后,让我们来看一些例子。
‘柒’ ghost observer安卓
你最好PROTEL99SE和变形杆菌安装。
前者是一个原理图设计和PCB设计,很多公司都在用这个。
后者是用于仿真,Proteus软件有十多年的历史,被广泛应用于世界各地,除了它的其他EDA工具使用相同的原则布局,PCB自动或手动布线和电路仿真功能,其革命性的功能,他的电路仿真是互动的,微处理器的应用,还可以直接在基于原理图的虚拟原型设计和软件编程的实时源代码级调试,如果显示和输出,以及看到的投资及营运,以及虚拟仪器,如示波器,逻辑分析仪,变形杆菌的系统配置的影响,使您可以创建一个完整的电子设计和开发环境的输出!
变形杆菌结合布局,混合模式SPICE仿真,PCB设计和先进的自动路由的原则,以实现完整的电子设计系统。
‘捌’ 观察者模式 在android中什么时候会用到
android中注册短信和联系人的变更,就会用到观察者模式
通过ContentProvider注册一个observer实现的