在游标中发生 1 次更改后更改方法时调用两次内容观察者
我有一个应用程序,我希望在其中将Android联系人列表中的详细信息发送到远程服务器,以便用户可以在线查看他的联系人。为此,我想通知远程服务器在电话上对联系人列表所做的任何更改。
我已经在“ContactsContract.Contacts.CONTENT_URI”上设置了一个ContentObserver,该服务在手机启动时启动。
我有很多疑问,前2个是偶然的,第三个是我的主要关注点。
1:一旦我设置了一个在光标上注册 ContentObserver 的服务,该观察者是否只存在于服务中?我的意思是,如果服务被杀死,内容观察者会继续观察吗?
2:我怀疑答案是否定的,但我还是会问。是否知道正在更新的哪个联系人正在触发我的内容观察者的更改方法?目前,我必须编译手机上所有联系人的列表,并将它们发送到我的远程服务器,只需发送正在更新的联系人的详细信息就会容易得多。
3:这是我的主要问题,当我对联系人列表进行更改时,onChange方法会连续两次被快速触发。1次更改,2次呼叫。有没有办法管理它?
public class ContactService extends Service {
JSONArray contactList;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Log.i("C2DM","content observers initialised");
super.onCreate();
//Call Log Content Provider observer
MyContentContactsObserver contactsObserver = new MyContentContactsObserver();
ContactService.this.getContentResolver().registerContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contactsObserver);
}
private class MyContentContactsObserver extends ContentObserver {
public MyContentContactsObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i("LOG","detected change in contacts: "+selfChange);
}
}
}
在我的logCat中以2行快速行的形式进行检测:
detected change in contacts: false
detected change in contacts: false