第一个创建文件:
public void addObserverLocked(Uri uri, IContentObserver observer,
boolean notifyForDescendents, Object observersLock) {
addObserverLocked(uri, 0, observer, notifyForDescendents, observersLock);
}
private void addObserverLocked(Uri uri, int index, IContentObserver observer,
boolean notifyForDescendents, Object observersLock) {
// If this is the leaf node add the observer
if (index == countUriSegments(uri)) {
mObservers.add(new ObserverEntry(observer, notifyForDescendents, observersLock));
return;
}
// Look to see if the proper child already exists
String segment = getUriSegment(uri, index);
if (segment == null) {
throw new IllegalArgumentException("Invalid Uri (" + uri + ") used for observer");
}
int N = mChildren.size();
for (int i = 0; i < N; i++) {
ObserverNode node = mChildren.get(i);
if (node.mName.equals(segment)) {
node.addObserverLocked(uri, index + 1, observer, notifyForDescendents, observersLock);
return;
}
}
// No child found, create one
ObserverNode node = new ObserverNode(segment);
mChildren.add(node);
node.addObserverLocked(uri, index + 1, observer, notifyForDescendents, observersLock);
}
第二个解析文件:
private void collectMyObserversLocked(boolean leaf, IContentObserver observer,
boolean selfNotify, ArrayList<ObserverCall> calls) {
int N = mObservers.size();
IBinder observerBinder = observer == null ? null : observer.asBinder();
for (int i = 0; i < N; i++) {
ObserverEntry entry = mObservers.get(i);
// Don't notify the observer if it sent the notification and isn't interesed
// in self notifications
if (entry.observer.asBinder() == observerBinder && !selfNotify) {
continue;
}
// Make sure the observer is interested in the notification
if (leaf || (!leaf && entry.notifyForDescendents)) {
calls.add(new ObserverCall(this, entry.observer, selfNotify));
}
}
}
public void collectObserversLocked(Uri uri, int index, IContentObserver observer,
boolean selfNotify, ArrayList<ObserverCall> calls) {
String segment = null;
int segmentCount = countUriSegments(uri);
if (index >= segmentCount) {
// This is the leaf node, notify all observers
collectMyObserversLocked(true, observer, selfNotify, calls);
} else if (index < segmentCount){
segment = getUriSegment(uri, index);
// Notify any observers at this level who are interested in descendents
collectMyObserversLocked(false, observer, selfNotify, calls);
}
int N = mChildren.size();
for (int i = 0; i < N; i++) {
ObserverNode node = mChildren.get(i);
if (segment == null || node.mName.equals(segment)) {
// We found the child,
node.collectObserversLocked(uri, index + 1, observer, selfNotify, calls);
if (segment != null) {
break;
}
}
}
}
第三个:数据结构
public static final class ObserverNode {
private class ObserverEntry implements IBinder.DeathRecipient {
public final IContentObserver observer;
public final boolean notifyForDescendents;
private final Object observersLock;
public ObserverEntry(IContentObserver o, boolean n, Object observersLock) {
this.observersLock = observersLock;
observer = o;
notifyForDescendents = n;
try {
observer.asBinder().linkToDeath(this, 0);
} catch (RemoteException e) {
binderDied();
}
}
public void binderDied() {
synchronized (observersLock) {
removeObserverLocked(observer);
}
}
}
public static final int INSERT_TYPE = 0;
public static final int UPDATE_TYPE = 1;
public static final int DELETE_TYPE = 2;
private String mName;
private ArrayList<ObserverNode> mChildren = new ArrayList<ObserverNode>();
private ArrayList<ObserverEntry> mObservers = new ArrayList<ObserverEntry>();
分享到:
相关推荐
主要介绍了Python基于递归和非递归算法求两个数最大公约数、最小公倍数,涉及Python递归算法、流程循环控制进行数值运算相关操作技巧,需要的朋友可以参考下
/*求二叉树叶子节点个数 -- 采用递归和非递归方法 经调试可运行源码及分析如下: ***/ #include #include #include using std::cout; using std::cin; using std::endl; using std::stack; /*二叉树结点定义*/ ...
在C++中用函数递归调用的方法实现辗转相除法求两个整数的最大公因子。
判别两个广义表是否相等的递归算法
有关汉诺塔和另一个有名函数的递归算法,c语言写的,但很容易改为c++
此程序可以实现对两个整数求最大公约数,所用得法为递归算法。
递归函数两个例子教程,感觉很不错,自己编好了,发上去和大家分享VB6.0源代码
在算法课程中用三种算法编程计算两个数的最大公约数
递归函数两个例子教程(VB6.0代码编写) 递归函数两个例子教程。 QQ223857666勾月
递归算法的执行过程分为递推和回归两个阶段。 在递归阶段,把较为复杂的问题(如规模为n)的求解推到比原来问题简单一些的问题(规模小于n)的求解 在回归阶段,当获得最简单情况的节后,逐级返回,依次获得少复杂...
此代码实现从N个数字中取出M个数字的所有组合,有两种实现方法,递归方法和非递归方法。
递归函数两个例子教程(VB6.0源代码编写) 递归函数两个例子教程,感觉很不错,自己编好了,发上去和大家分享VB6.0源代码
一是已知递归函数(其中DIV为整除),当n=0时,F(n)=1; 当n>0时, F(n)=n*F(nDIV2);...二是稀疏矩阵的操作,基本功能要求:稀疏矩阵采用三元组表示,求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C。
Ackermann函数的递归与非递归解法 为Visual C++ 6.0工程 有测试函数
用递归的方法画分形图 用递归的方法画分形图 分形几何是数学领域里新兴的课题,如果将图形的每个元素按某种规则进行变形... stopping compilation d:\wordplay\c++\范例\fractral递归方法画分图形\stdafx.cpp 19
一块钱能买一瓶啤酒,两个空瓶能换一瓶啤酒,递归实现n块钱能买的啤酒数。 要求: (1) 用递归的方法计算能喝到的啤酒数目。 (2) 函数的原型为 int getNumberOfBeer(int n); (3) 不能定义全局变量。
递归调用算年龄 汇编 成绩为优 课设参考的而好东西
一块钱能买一瓶啤酒,两个空瓶能换一瓶啤酒,递归实现n块钱能买的啤酒数。 要求: (1) 用递归的方法计算能喝到的啤酒数目。 (2) 函数的原型为 int getNumberOfBeer(int n); (3) 不能定义全局变量。
单链表逆序 用了两个指针变量。 非递归实现。
递归与循环 对于不同类型的需要重复计算的问题,循环和递归两种方法各有所长,能给出更直观简单的方案。另一方面,循环和递归的方法可以互相转换。任何一个循环的代码都可以用递归改写,实现相同的功能;反之亦然。...