• 事件管理器设计备忘录


    事件管理器设计备忘录

     

    转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd

    作者联系方式:李先静<xianjimli at hotmail dot com>

    更新时间:2007-5-17

     

    事件管理器基于MVC模型提供一种进程间的通信机制,其主要作用是解开事件的触发者和事件的实现者之的耦合,也为集中处理某些事件提供了方便。现在看来,事件管理器的作用已经大不如以前了,比如下面这些事件,以前由事件管理器处理,而现在已经由其它服务代劳了:

     

    1.         设置改变。用户通过系统设置应用程序修改设置,为了避免系统设置与其它功能之间的耦合,在系统设置中直接让设置生效是不合适的。通常做法是触发一个设置改变的事件,该事件被传递到相应的应用程序,由于该应用程序做出处理。

     

    现在的设置信息通过gconf存取,而不是直接存取配置文件。由于gconf实现了配置变化通知机制,它可以直接通知应用程序,自然不需要事件管理器操心了。

     

    2.         硬件变化,通知应用程序做相应处理。比如手机插上充电器,状态栏要显示充电动画。插上/拔除SD卡,文件浏览器要更新相应的图标,如此等等。

     

    现在这些硬件变化事件,已经由udev+hal来通知应用程序了。hal也是基于MVC模型实现的,应用程序向它注册事件就行了,也不需要事件管理器操心了。

     

    事件处理器当然还有它存在的空间,比如:

    1.         存储空间不足。手机上的存储空间非常有限,存储空间不足的现象是常见的,这时要提醒用户删除一些数据。不可能在每处写文件时都判断,然后弹出对话框提醒用户,特别在是非GUI的程序中,更不能如此。这时可以触发一个存储空间不足的事件,触发者不需要关心事件如何处理。我们可以让状态栏充当事件处理者,它弹出一个提示框,或者显示存储空间不足的状态。

     

    2.         时间改变。修改系统时间,也会影响其它一些应用程序的行为,比如闹钟、日程和其它alarm相关应用程序,它们需要调整自己的数据。这时可以通过事件管理器,触发一个事件通知其它应用程序。

     

    一般平台都会有类似的功能,可能名字会有所不同,功能上有强有弱。比如AccessALP中的notifymanagerPC上的libnotifynotifydaemonALPnotifymanager功能强大,它支持同步事件,不过用处不大。PC上的libnotifynotifydaemon的主要功能只是提示用户,而且严重依赖X Window,移植比较困难。最终我决定自己开发,它提供了如下接口:

     

    1.         triger_event 触发一个事件,触发时可以指定事件的状态,也可以指定其它一些信息,比如有效期和触发者ID等。

     

    2.         query_event 查询一个事件的状态,有的事件有状态,可以调用此函数查询它的状态和其它信息。

     

    3.         reg_event 注册事件处理函数。当有事件触发时,调用注册的回调函数,如果回调函数为空,则视为注销。

     

    ~~end~~

     

     
  • 相关阅读:
    56. Merge Intervals
    Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths CodeForces
    CodeForces 1328E-Tree Queries【LCA】
    2^x mod n = 1 HDU
    CodeForces 1327D
    CodeFoeces 1327E
    AtCoder Beginner Contest 159 E
    牛客14648-序列【莫比乌斯反演+容斥定理】
    完全平方数 HYSBZ
    MongoDB学习笔记(六、MongoDB复制集与分片)
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167723.html
Copyright © 2020-2023  润新知