android观察者模式
Ⅰ 观察者模式 在android中什么时候会用到
android中注册短信和联系人的变更,就会用到观察者模式
通过ContentProvider注册一个observer实现的
Ⅱ Android 开发中常用到的设计模式有哪些
设计模式总共是23种,常用的有下面几种 :
1 单例模式,application 就是单例 可以存储一些数据例如记录activity的启动数量 ;
2 观察者模式: button的onClickListener ,监听button的响应;
3 适配器模式 :例如recyclerView 的adapter ;
4 命令模式: 例如开源库eventBus ,把数据封装好 发送出去,然后接收; 等等等等,很多
Ⅲ android用到哪些设计模式
1 Android设计模式系列-组合模式
2 Android设计模式—策略模式
3 Android设计模式系列-单例模式
4 Android设计模式系列--工厂方法模式
5 Android设计模式系列-适配器模式
6 Android设计模式系列--原型模式
7 Android设计模式系列--观察者模式
8 Android设计模式系列--模板方法模式
Ⅳ Android-Lifecycle原理解析
Event触发的时机:
而在androidx.activity.ComponentActivity和androidx.core.app.ComponentActivity中,该方法的实现,其实都是一样的。
但是这两个Activity,其实都有自己的mLifecycleRegistry对象。
LifecycleRegistry对象其实可以理解为观察者模式中的Observable,也就是被观察者,而LifecycleRegistry对象的创建,其实是传入一个LifecycleOwner实现类对象,而androidx.activity.ComponentActivity和androidx.core.app.ComponentActivity实现了LifecycleOwner接口,所以传入的是this。
LifecycleRegistry中聚合了多个LifecycleObserver,生命周期改变时,通知LifecycleObserver进行相应方法的调用。
在LifecycleRegistry类中的addObserver方法中,其实就是通过封装LifecycleObserver生成了一个ObserverWithState对象,然后放入FastSafeIterableMap中,而FastSafeIterableMap其实就是一个自定义列表,用于保存观察者并且可在遍历期间处理删除/添加。
其实在自定义的某个类去实现LifecycleObserver接口的时候,在activity中,是需要通过getLifecycle().addObserver()进行注册的,这个过程其实就是调用了LifecycleRegistry的addObserver()方法。
ObserverWithState statefulObserver = new ObserverWithState(observer, initialState);会将LifecycleObserver对象封装在对象中。但是这里的需要判断是实现了哪个接口,比如androidx.activity.ComponentActivity中的构造函数中,因为是直接new LifecycleEventObserver匿名内部类实现接口对象,则isLifecycleEventObserver为true,就不会new (),而在自定义一个类的时候,一般实现LifecycleObserver接口,则就会new ()
androidx.activity.ComponentActivity的构造函数:这里是new LifecycleEventObserver
自定义的BasePresenter:这里是实现LifecycleObserver接口
所以上面的两种不同的实现,BasePresenter实现的是LifecycleObserver,所以这个LifecycleObserver的最终实现是。而ComponentActivity因为是new LifecycleEventObserver,所以这个匿名内部类对象就是最终实现。
在androidx.core.app.ComponentActivity的onCreate方法中,会调用
这里使用ReportFragment,如果是api29以及以上的,则可以直接注册回调来获取Activity的生命周期回调。如果是api29以下的,则需要手动给Activity添加一个空白的Fragment,类似于Glide监听生命周期回调的做法。
LifecycleCallbacks的定义如上,是在ReportFragment中定义的,其实就是使用了Application.ActivityLifecycleCallbacks来实现了。
其实就是在androidx.core.app.ComponentActivity中添加一个ReportFragment,而ReportFragment的生命周期方法,其实都调用了一个dispatch方法。
所以在ReportFragment的生命周期方法,其实就会通过调用对应的dispatch方法进而调用到了Activity的getLifecycle()方法获取到一个LifecycleRegistry对象,然后调用LifecycleRegistry的handleLifecycleEvent()方法。
这里需要事先获取到Activity的下一个生命周期状态,而这个状态过程其实与Fragment的类似,都是先升序,然后再降序的一个过程。即ON_CREATE是CREATED,ON_RESUME是RESUMED,然后ON_PAUSE是变成STARTED
而上面调用的sync()方法,其实其内部会调用两个方法backwardPass()和forwardPass(),一个是逆推,一个是顺推,其实就是可以认为一个是正序,一个是倒序。
比如forwardPass(),其实其内部就是遍历刚才缓存Observer的集合,找到每个Observer
而这里的dispatchEvent,其实就是ObserverWithState的方法,因为ObserverWithState内部封装了LifecycleEventObserver对象,而LifecycleEventObserver对象又是封装了LifecycleObserver对象的。
比如Activity的,其实onStateChanged是在androidx.activity.ComponentActivity的构造器中添加注册的LifecycleEventObserver监听接收对应的处理回调,在这里就会根据是ON_STOP还是ON_DESTROY进行回调的处理,也就是生命周期的处理。
这样的生命周期回调,在自定义类实现LifecycleObserver接口的时候,也可以采用注解的方式注册对应的LifecycleEventObserver监听,这样的生命周期的回调,其实就是回调到对应的注解和事件的方法中。这样是采用了类似于apt注解处理器的方式,生成了对应的java类
这里需要注意,如果是自定义添加监听的时候,是实现了LifecycleEventObserver,那么在分发的时候,调用ObserverWithState的dispatchEvent方法去分发,就会直接回调到了自定义LifecycleEventObserver实现类中的onStateChanged中;而如果是使用LiveData添加观察者的话,则是封装成LifecycleBoundObserver对象,然后通过其onStateChanged方法继续进一步的处理分发,调用到对应的Observer的onChanged方法进行最终的处理
如果这里的分发是分发到上面的那个自定义的BasePresenter,则需要经过
从上面的原理解析,可以知道,Lifecycle的生命周期的感知和分发,其实也是依赖于一个ReportFragment,这其实也是一个空的Fragment,这样的做法,其实与Glide的生命周期的监听是类似的做法,都是采用一个空的Fragment来监听生命周期的变化,然后在不同的生命周期做不同的操作。
Ⅳ android设计模式中的观察者模式能说一下吗
/*
*观察者模式
*定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的
*对象都得到通知并被自动更新
*
*当然,MVC只是Observer模式的一个实例。Observer模式要解决的问题为:
*建立一个一(Subject)对多(Observer)的依赖关系,并且做到当“一”变化的时候,
*依赖这个“一”的多也能够同步改变。最常见的一个例子就是:对同一组数据进行统计分析时候,
*我们希望能够提供多种形式的表示(例如以表格进行统计显示、柱状图统计显示、百分比统计显示等)。
*这些表示都依赖于同一组数据,我们当然需要当数据改变的时候,所有的统计的显示都能够同时改变。
*Observer模式就是解决了这一个问题。
*
*适用性:
*1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面
*将这两者封装成独立的对象中以使它们可以各自独立的改变和服用
*
*2.当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变
*
*3.当一个对象必须通知其它对象,而它又不能假定其它对象是谁
*
*参与者:
*1.Subject(目标)
*目标知道它的观察者,可以有任意多个观察者观察同一个目标
*提供注册和删除观察者对象的接口
*
*2.Observer(观察者)
*为那些在目标发生改变时需获得通知的对象定义个更新的接口
*
*3.ConcreteSubject(具体目标)
*将有关状态存入各ConcreteObserver对象
*当它的状态发送改变时,向它的各个观察者发出通知
*
*4.ConcreteObserver(具体观察者)
*维护一个指向ConcreteObserver对象的引用
*存储有关状态,这些状态应与目标的状态保持一致
*实现Observer的更新接口是自身状态与目标的状态保持一致
*
*
**/
Ⅵ Android 开发中常用到的设计模式有哪些
工厂模式是基础,用的最广泛。
适配器模式,c#有DataAdapter 类,android 有Adapter 类。
观察者模式,涉及gui 的编程都会用到,简单的控件对单击鼠标的响应都是观察者模式。
迭代器模式,c#中每次foreach 都是对迭代器的调用。
访问者模式,对一个集合中的不同元素用不同的方法就会用到访问者模式,如果对集合中的元素采用统一方法但需要不同的统一方法就是策略模式。
装饰模式,灵活的给类添加功能。模版模式,充分利用多态大大减少了代码的冗余。
Ⅶ Android中常用的几种设计模式
一.单例模式,二.建造者模式,三.观察者模式 Observer(观察者),Observable(被观察者)四.工厂者模式:Factory
Ⅷ android源码里哪些地方用到了观察者模式
1. Subject被观察者。是一个接口或者是抽象类,定义被观察者必须实现的职责,它必须能偶动态地增加、取消观察者,管理观察者并通知观察者。
2. Observer观察者。观察者接收到消息后,即进行update更新操作,对接收到的信息进行处理。
3. ConcreteSubject具体的被观察者。定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知。
4. ConcreteObserver具体观察者。每个观察者在接收到信息后处理的方式不同,各个观察者有自己的处理逻辑。
观察者模式有什么优点呢:
观察者和被观察者之间是抽象耦合的,不管是增加观察者还是被观察者都非常容易扩展。
根据单一职责原则,每个类的职责是单一的,那么怎么把各个单一的职责串联成真实的复杂的逻辑关系呢,观察者模式可以起到桥梁作用。
观察者模式是松耦合的典型。
在Android源码中,其中一个经典的使用到观察者模式的就是Android控件的事件监听模型。
Ⅸ android中观察者模式的应用场景是什么
你说的场景是符合这个模式的:
观察者模式的应用场景:
1、 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。
2、 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。
观察者模式的优点:
1、 Subject和Observer之间是松偶合的,分别可以各自独立改变。
2、 Subject在发送广播通知的时候,无须指定具体的Observer,Observer可以自己决定是否要订阅Subject的通知。
3、 遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。