嗨,我正在尝试使用以下代码。内容解析程序无法处理此问题。有人能说出的想法吗
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();
}
});
提前感谢
ContentObserver
仅与ContentProvider
一起工作,后者在提供程序的内容发生更改时调用ContentResolver
上的notifyChange()
方法之一。如果ContentProvider
不调用notifyChange()
,则不会向ContentObserver
通知更改。
问题
我遇到的问题是ContentObserver.onChange()
方法从未被调用,因为ContentObserver
的Handler
的Looper
初始化不正确。我打了Looper.prepare()
后忘了打Looper.loop()
。。。这导致CCD_ 14不消耗事件并调用CCD_。
解决方案
解决方案是为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);
关于控制在哪个线程上执行ContentObserver.onChange()
的有用SO文章。