Android中内容观察者的使用---- ContentObserver类详解

本文深入探讨了Android中ContentObserver与ContentProvider的工作原理,包括如何注册和取消观察特定Uri的变化,以及如何通过ContentObserver类实现对数据库变化的响应。通过实例展示了如何根据Uri类型进行数据查询,并详细解释了ContentResolver类提供的方法及其参数作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于

   数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri发生变化时,便会触发它。触发器分为表触发器、行触发器,

  相应地ContentObserver也分为“表“ContentObserver、“行”ContentObserver,当然这是与它所监听的Uri MIME Type有关的。

 

           熟悉Content Provider(内容提供者)的应该知道,我们可以通过UriMatcher类注册不同类型的Uri,我们可以通过这些不同的

    Uri来查询不同的结果。根据Uri返回的结果,Uri Type可以分为:返回多条数据的Uri、返回单条数据的Uri。

 

 

  注册/取消注册ContentObserver方法,抽象类ContentResolver类中的方法原型如下:

 

    public final void registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)

             功能:为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理。

             参数:uri          需要观察的Uri(需要在UriMatcher里注册,否则该Uri也没有意义了)

                        notifyForDescendents  为false 表示精确匹配,即只匹配该Uri

                                                                     为true 表示可以同时匹配其派生的Uri,举例如下:

                          假设UriMatcher 里注册的Uri共有一下类型:

                                1 、content://com.qin.cb/student (学生)

                                2 、content://com.qin.cb/student/# 

                                3、 content://com.qin.cb/student/schoolchild(小学生,派生的Uri)

 

                    假设我们当前需要观察的Uri为content://com.qin.cb/student,如果发生数据变化的 Uri 为   

           content://com.qin.cb/student/schoolchild ,当notifyForDescendents为 false,那么该ContentObserver会监听不到,  

           但是当notifyForDescendents 为ture,能捕捉该Uri的数据库变化。

 

                     observer       ContentObserver的派生类实例

 

 

    public final void  unregisterContentObserver(ContentObserver observer)

          功能:取消对给定Uri的观察

          参数: observer ContentObserver的派生类实例

 

        

ContentObserver类介绍

 

  构造方法 public void ContentObserver(Handler handler)  

                       说明:所有   ContentObserver的派生类都需要调用该构造方法

        参数: handler  Handler对象。可以是主线程Handler(这时候可以更新UI 了),也可以是任何Handler对象。

 常用方法

   void onChange(boolean selfChange)

       功能:当观察到的Uri发生变化时,回调该方法去处理。所有ContentObserver的派生类都需要重载该方法去处理逻辑。

       参数:selfChange 回调后,其值一般为false,该参数意义不大(我也不懂,理解方法最重要)。

 

  另外两个方法,用处不大,我也不懂,大家参照SDK自行理解,冒昧了。

  boolean  deliverSelfNotifications()

     说明:Returns true if this observer is interested in notifications for changes made through the cursor the observer is registered with.

  

  final void dispatchChange(boolean selfChange)

 

 

  观察特定Uri的步骤如下

 

     1、    创建我们特定的ContentObserver派生类,必须重载父类构造方法,必须重载onChange()方法去处理回调后的功能实现

     2、    利用context.getContentResolover()获得ContentResolove对象,接着调用registerContentObserver()方法去注册内容观察者

     3、    由于ContentObserver的生命周期不同步于Activity和Service等,因此,在不需要时,需要手动的调用

             unregisterContentObserver()去取消注册。    

 

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值