美文网首页
观察者模式实现android的通信,替代EventBus

观察者模式实现android的通信,替代EventBus

作者: android老中医 | 来源:发表于2017-10-31 10:50 被阅读0次

这边只说功能的实现,具体观察者模式请自行去了解,因为最近在熟悉kotlin所以以下代码用kotlin书写

首先创建被观察者接口

open interface Observer {

    fun update(obj: Object)

}

创建观察者基类

open abstract class Subject {
    
    //被观察者的集合
    protected val subjectList = arrayListOf<Observer>()

    //注册被观察者,添加到集合
    abstract fun register(observer:Observer)
    //删除集合
    abstract fun unRegister(observer: Observer)
    //发送消息
    abstract fun notifyObservers(obj: Object)

}

具体观察者实现方法,这里kotlin已经实现了单例

object ConcreteSubject : Subject() {
    override fun register(observer: Observer) {
        subjectList.add(observer)
    }

    override fun unRegister(observer: Observer) {
        subjectList.remove(observer)
    }
    //调用集合所有的方法并调用
    override fun notifyObservers(obj: Object) {
        for (observer in subjectList) {
            observer.update(obj)
        }
    }
}

发送消息页面

class TestActivity :AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_text)
        button.setOnClickListener {
            finish()
            //发送消息
            ConcreteSubject.notifyObservers("text发送的消息" as Object)

        }

    }
}

接收消息,注册,取消注册,这里必须取消注册 否则会出现内存泄漏

class MainActivity : AppCompatActivity() ,Observer{
    @RequiresApi(Build.VERSION_CODES.KITKAT)
    override fun update(obj: Object) {
        tv.setText(obj as String)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ConcreteSubject.register(this)
        button.setOnClickListener {
            startActivity(Intent(this,TestActivity::class.java))
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        ConcreteSubject.unRegister(this)
    }
}
class MainActivity : AppCompatActivity() ,Observer{
    @RequiresApi(Build.VERSION_CODES.KITKAT)
    override fun update(obj: Object) {
        tv.setText(obj as String)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ConcreteSubject.register(this)
        button.setOnClickListener {      
            startActivity(Intent(this,TestActivity::class.java)) 
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        ConcreteSubject.unRegister(this)
    }
}

项目地址

相关文章

  • 翻了一遍EventBus官方文档

    EventBus事件总线.以观察者模式实现,消息推送/订阅.用于Android组件之间相互通信 Note:文章基于...

  • EventBus使用

    EventBus事件总线.以观察者模式实现,消息推送/订阅.用于Android组件之间相互通信。 (定义:针对事件...

  • 观察者模式实现android的通信,替代EventBus

    这边只说功能的实现,具体观察者模式请自行去了解,因为最近在熟悉kotlin所以以下代码用kotlin书写 首先创建...

  • Android中实现跨进程通信(IPC)的方式(三)之观察者模式

    Android中实现跨进程通信(IPC)的方式(三)之观察者模式 前言     在Android中实现跨进程通信(...

  • EventBus源码阅读

    1. EventBus简介 EventBus是基于观察者模式实现的事件发布/订阅框架,主要运用于Android中各...

  • 观察者模式

    观察者模式 我知道android的listview是用的观察者模式,Eventbus也是用的观察者模式。但是我还是...

  • EventBus分析

    EventBus基本使用 EventBus基于观察者模式的Android事件分发总线。 从这个图可以看出,Even...

  • EventBus使用介绍(一)

    首先EventBus采用的观察者模式,这类似与RXJava,原理如下图 EventBus用到非常多的场景之一是替代...

  • EventBus的使用

    EventBus是一个Android平台上的事件发送/订阅框架,采用观察者模式实现,可以优化组件间的信息传递过程。...

  • 一步一步带你了解EventBus3.1.1 源码

    EventBus源码分析 EventBus 是一个事件总线框架,解决了组件之间通信的问题。使用了观察者模式。使代码...

网友评论

      本文标题:观察者模式实现android的通信,替代EventBus

      本文链接:https://www.haomeiwen.com/subject/iyavpxtx.html