ContentObserver 在 android 中不工作
ContentObserver not working in android
您好,我正在尝试使用以下内容 code.The 内容解析器无法与 this.Can 任何人提供想法
getContentResolver().registerContentObserver(MyContentProvider.CONTENT_URI,true, new ContentObserver(new Handler()){
@Override public void onChange( boolean selfChange){
showDialog();
}
@Override
public void onChange(boolean selfChange, Uri uri) {
// Handle change.
showDialog();
}
});
提前致谢
A ContentObserver
仅适用于 ContentProvider
,当提供程序的内容发生变化时调用 one of the notifyChange()
methods on a ContentResolver
。如果 ContentProvider
没有调用 notifyChange()
,ContentObserver
将不会收到有关更改的通知。
问题
我遇到的问题是 ContentObserver.onChange()
方法从未被调用,因为 ContentObserver
的 Handler
的 Looper
未正确初始化。我忘记在调用 Looper.prepare()
后调用 Looper.loop()
...这导致 Looper
不消耗事件并调用 ContentObserver.onChange()
.
解决方案
解决方案是为 ContentObserver
:
正确创建和初始化 Handler
和 Looper
// creates and starts a new thread set up as a looper
HandlerThread thread = new HandlerThread("MyHandlerThread");
thread.start();
// creates the handler using the passed looper
Handler handler = new Handler(thread.getLooper());
// creates the content observer which handles onChange on a worker thread
ContentObserver observer = new MyContentObserver(handler);
useful SO post about controlling which thread ContentObserver.onChange()
is executed on.
您好,我正在尝试使用以下内容 code.The 内容解析器无法与 this.Can 任何人提供想法
getContentResolver().registerContentObserver(MyContentProvider.CONTENT_URI,true, new ContentObserver(new Handler()){
@Override public void onChange( boolean selfChange){
showDialog();
}
@Override
public void onChange(boolean selfChange, Uri uri) {
// Handle change.
showDialog();
}
});
提前致谢
A ContentObserver
仅适用于 ContentProvider
,当提供程序的内容发生变化时调用 one of the notifyChange()
methods on a ContentResolver
。如果 ContentProvider
没有调用 notifyChange()
,ContentObserver
将不会收到有关更改的通知。
问题
我遇到的问题是 ContentObserver.onChange()
方法从未被调用,因为 ContentObserver
的 Handler
的 Looper
未正确初始化。我忘记在调用 Looper.prepare()
后调用 Looper.loop()
...这导致 Looper
不消耗事件并调用 ContentObserver.onChange()
.
解决方案
解决方案是为 ContentObserver
:
Handler
和 Looper
// creates and starts a new thread set up as a looper
HandlerThread thread = new HandlerThread("MyHandlerThread");
thread.start();
// creates the handler using the passed looper
Handler handler = new Handler(thread.getLooper());
// creates the content observer which handles onChange on a worker thread
ContentObserver observer = new MyContentObserver(handler);
useful SO post about controlling which thread ContentObserver.onChange()
is executed on.