我希望收到有关联系人提供商更改的通知,因此我决定实施自定义ContentObserver
:
public class ContactsChangeObserver extends ContentObserver {
private final WeakReference<Context> contextRef;
public ContactsChangeObserver(Context context) {
super(new Handler(Looper.getMainLooper()));
this.contextRef = new WeakReference<>(context.getApplicationContext());
}
@Override
public void onChange(boolean selfChange) {
onChange(selfChange, null);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
Context context = contextRef.get();
if (context != null) {
// do work
}
}
}
我最感兴趣的是在我的应用程序处于后台时接收更新,因此onChange
中的代码可能只是将标记设置为SharedPreferences
以供稍后处理。我是在自定义Application
课程中注册观察者的。 onCreate
方法。这种方法的问题显然是没有直接的方法来取消注册观察者,如果我的应用程序被多次重新创建,这将导致许多过时的观察者。所以我的问题是,是否有更好的方法来实现我的用例?