Java 用于在IntentService实现中查询数据的游标加载程序
我有一个intent服务,它实际上是无限运行的,直到一个静态kill布尔值被设置为true或某个特定条件调用stopSelf()。(这是个好主意吗?) 我的服务依赖于查询内容提供商。 现在,我不想“轮询”提供商的更改,所以我尝试了Java 用于在IntentService实现中查询数据的游标加载程序,java,android,multithreading,android-intentservice,Java,Android,Multithreading,Android Intentservice,我有一个intent服务,它实际上是无限运行的,直到一个静态kill布尔值被设置为true或某个特定条件调用stopSelf()。(这是个好主意吗?) 我的服务依赖于查询内容提供商。 现在,我不想“轮询”提供商的更改,所以我尝试了 getContentResolver().registerContentObserver(uri, false, contentObserver); 我对ContentObserver的定义如下: private final ContentObserver cont
getContentResolver().registerContentObserver(uri, false, contentObserver);
我对ContentObserver的定义如下:
private final ContentObserver contentObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
if(kill) {
Log.i("Downloader", "Unregister observer");
getContentResolver().unregisterContentObserver(contentObserver);
return;
}
//Must submit to a thread else, UI gets blocked
executor.execute(updater);
}
};
private final Executor executor = Executors.newSingleThreadExecutor();
“updater”是一个简单的可运行程序,它可以重新查询我正在观察的对象
到目前为止,这一模式似乎正在发挥作用。当我观察到的URI被删除时,我使用stopSelf()退出服务。基本上,启动此服务是为了监视特定URI的更改。内置的意向服务排队对我来说真的很有用。
我有两个问题:
服务并管理您自己的后台线程。然后使用stopService()
,或通过startService()
传递到服务的消息,而不是“静态终止布尔值”
有没有比使用主循环器更好的方法来提供处理程序
使用常规的服务
和自己的叉子,然后使用它的活套
。然后,您可以摆脱单独的执行器
,并且您仍然不必担心主应用程序线程被捆绑,就像您使用主线程的活套
一样。当我看到您双引号引用我的kill布尔值:D时,我大笑起来。您的模型看起来更整洁了。我会用的。谢谢我很快就会接受的。