ContentObserver的文档对我来说并不清楚.
在哪个线程上调用ContentObserver的onChange?
在哪个线程上调用ContentObserver的onChange?
我检查过,它不是你创建观察者的线程.看起来它是发送通知的线程,但我没有找到有关它的文档.
解决方法
执行ContentObserver.onChange()方法的线程是
ContentObserver
constructor的
Handler
的
Looper
Thead
.
例如,要让它在主UI线程上运行,代码可能如下所示:
// returns the applications main looper (which runs on the application's // main UI thread) Looper looper = Looper.getMainLooper(); // creates the handler using the passed looper Handler handler = new Handler(looper); // creates the content observer which handles onChange on the UI thread ContentObserver observer = new MyContentObserver(handler);
或者,要让它在新的工作线程上运行,代码可能如下所示:
// 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);
或者甚至让它在当前线程上运行,代码可能看起来像这样.通常这不是你想要的,因为循环的Thread不能做太多其他因为Looper.loop()是一个阻塞调用.然而:
// prepares the looper of the current thread Looper.prepare(); // creates a handler for the current thread's looper. Handler handler = new Handler(); // creates the content observer which handles onChange on this thread ContentObserver observer = new MyContentObserver(handler); // starts the current thread's looper (blocking call because it's // looping,and handling messages forever). the content observer will // only execute the onChange method while the thread is looping; // interrupting Looper.loop() would "break" the content observer. Looper.loop();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。