我正在开发应用程序,我有一个任务来处理首选项,所以实现了 切换首选项,如果开关打开,我必须监视联系人数据库,所以我使用 内容观察者和用户切换时我必须取消注册该内容观察者 看看我实现的代码
MyContentObserver observer;
switchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
boolean switched = ((SwitchPreference) preference)
.isChecked();
if( !switched){
// Toast.makeText(SettingActivity.this,"Switch is on",Toast.LENGTH_SHORT).show();
observer=new MyCOntentObserver();
getContentResolver()
.registerContentObserver(
ContactsContract.Contacts.CONTENT_URI, true,
observer);
}
else{
// Toast.makeText(SettingActivity.this,"Switch is off",Toast.LENGTH_SHORT).show();
// getContentResolver().unregisterContentObserver(observer);
//here i want a logic that to destroy instance which i created
while switch is On
}
return true;
}
});
public class MyContentObserver extends ContentObserver{
public MyCOntentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.e("","~~~~~~contact inserted or updated"+selfChange);
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
}
任何建议或帮助都将受到高度赞赏。
答案 0 :(得分:1)
那就行了。您只需使用相同的观察者调用unregisterContentObserver即可删除通知。但是为了避免错误,如果已经删除了observar,请将其添加到try-catch块中
try {
getContentResolver().unregisterContentObserver(observer);
} catch (IllegalStateException ise) {
// Do Nothing. Observer has already been unregistered.
}
您不需要销毁实例,只需确保它是单例。因此,如果用户再次打开设置,您将回收该实例。