数据库监听。数据库一次notify,Activity多次接收
今天项目中发现一个bug:
(1)当uri数据库中有更新,会从数据库层DataService中通知应用层,调用notifyChange:
mContext.getContentResolver().notifyChange(uri, null);
(2)Activity中有类DataListener
class DataListener extends ContentObserver
{ public DataListener(Handler handler)
{
super(handler);
// TODO Auto-generated constructor stub
} @Override
public void onChange(boolean selfChange)
{
try
{
List<ContactDataItem> contactList = DataService.getInstance().getDao(ContactDataItem.class).queryForAll();
Log.d(LogConfig.CONTRACTS_TAG, "data change");
mNeedRefreshContactList = true;
mContactsAdapter.setContactList(contactList);
notifyDataSetChanged();
}
catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Activity中,注册数据库监听
mDataListener = new DataListener(new Handler(this.getMainLooper()));
mContext.getContentResolver().registerContentObserver(uri, false, mDataListener);
(3)后来发现,log中DataService通知了一次
==DataService== notifyChange Uri content://test/data/contact
但是Acitivity中,以下这句Log出现次数是递增的:
Log.d(LogConfig.CONTRACTS_TAG, "data change");
第一次进页面出现一次,第二次进页面出现两次,页面也相应刷新两次。
(4)后来发现是个低级错误,出界面时没有取消监听:
mContext.getContentResolver().unregisterContentObserver(mDataListener);
注册/取消注册ContentObserver方法,抽象类ContentResolver类中的方法原型如下:
public final void registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)
功能:为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理。
参数:uri 需要观察的Uri(需要在UriMatcher里注册,否则该Uri也没有意义了)
observer ContentObserver的派生类实例
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的数据库变化。
数据库监听。数据库一次notify,Activity多次接收的更多相关文章
- MySQL监听数据库存储过程出现异常
DELIMITER $$ DROP PROCEDURE IF EXISTS `proc_ordertourist_cancel`$$ CREATE PROCEDURE proc_ordertouris ...
- Oracle 数据库监听配置和服务
-- 补充说明 如果要远程连接192.168.10.44上的oracle,那么192.168.10.44服务器必须启动TNSListener.(配置文件 listener.ora) PLSQL Dev ...
- Web重温系列(三):OracleDependency实现监听数据库变化
有个小项目(后来由另一个小组以Java开发了),内容是监控一个Oracle数据库.如果其中一个表A有数据变动,则需要将相关内容重组后通过接口发送给B. 通常的解决办法是定时查询,时间间隔可以小一点,还 ...
- SqlDependency C#代码监听数据库表的变化
SqlDependency提供了这样一种能力:当被监测的数据库中的数据发生变化时,SqlDependency会自动触发OnChange事件来通知应用程序,从而达到让系统自动更新数据(或缓存)的目的. ...
- Android简易实战教程--第二十一话《内容观察者监听数据库变化》
当数据库的数据发生改变,我们又想知道具体改变的情况时,就需要对数据库的变化情况做一个监控.这个任务,就由内容观察者来完成.下面这个案例,为短信数据库注册内容观察者,来监控短信的变化情况,当短信数据库发 ...
- Oracle数据库监听服务无法启动
(1) 安装好Oracle后,启动Net Manager,测试orcl失败,报错“ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务”,需要修改监听文件.修改前: # list ...
- Oracle 数据库监听无法连接上、监听HANG住、监听无响应、TNS-12560
环境: Windows server 2003 Oracle 11.2.0.1 问题: 一套老数据库在运行了很久后,突然就连接不上了,提示监听异常. 处理: 1.CMD命令行检查监听状态:无监听 2. ...
- 问题1:Oracle数据库监听启动失败(重启监听,提示The listener supports no services)
编辑监听文件:/home/DB/oracle/11gR2/db/network/admin/listener.ora 在文件内添加静态监听实例,如下内容: SID_LIST_LISTENER =(SI ...
- 无法重启oracle数据库监听
一.报错 TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linu ...
随机推荐
- MVC3 学习总结
1.项目文件结构 controllers,views 2.Model特性实现模型的客户端和服务端的验证 1)自带特性 2)扩展特性,或者重写特性 3.实现MVC filter 的类 ...
- asp.net JS取值
<script> $(function () { $.post("RegisterNew.aspx", { "ddlprovince": $(&qu ...
- jquery——简单的下拉列表制作及bind()方法的示例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- poj 2513 欧拉图/trie
http://poj.org/problem?id=2513 Colored Sticks Time Limit: 5000MS Memory Limit: 128000K Total Submi ...
- KNN cosine 余弦相似度计算
# coding: utf-8 import collections import numpy as np import os from sklearn.neighbors import Neares ...
- Mybatis 别名机制,自动扫描 数据的增删改
mybatis别名机制: 在mybatis.xml文件中的<configuration></configuration>标签中间加入属性<typeAliases>& ...
- Collection集合存储自定义对象练习
public class Student { private String name; private int age; public Student() { super(); } public St ...
- php实现word在线浏览功能。
http://laoniangke.com/php/2012/10/08/php-doc-webview.html
- 用Java实现异构数据库的高效通用分页查询功能
不同数据库的分页查询语句有着较大区别,其中MySQL数据的limit offset语法最为简单,而SQL Server数据库和Oracle数据库的分页就比较复杂了. 网上常见的SQL Server和O ...
- [独孤九剑]Oracle知识点梳理(九)数据库常用对象之package
本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...