我有一个Android服务,即使在最后一个Activity从堆栈中弹出,或者用户已选择执行其他操作,我仍希望继续运行。
本质上,服务正在侦听远程服务器上的更改,当且仅当应用程序中的活动未运行(或可见)时,我才想生成通知。换句话说,我不希望在用户直接与应用程序交互时发生通知。
在用户直接与应用程序交互的情况下,服务将通知活动并根据更改更新相应的UI元素。我计划通过观察者模式实现这一点。
如果没有应用程序活动绑定到它,服务如何知道?
谢谢, Ĵ
答案 0 :(得分:25)
你需要在onBind,onUnbind和onRebind方法中使用布尔值:
public boolean bound;
@Override
public Binder onBind(Intent intent){
bound = true;
return myBinder; //declare and init your binder elsewhere
}
@Override
public boolean onUnbind(Intent intent) {
bound = false;
return true; // ensures onRebind is called
}
@Override
public void onRebind(Intent intent) {
bound = true;
}
仅当所有客户端断开连接时才会调用onUnbind。因此,绑定将保持 true ,直到所有客户端都已断开连接。
**注:根据Gil的反馈进行编辑。 **
答案 1 :(得分:11)
我不能对SharkAlley的答案发表评论,所以我在这里重播。
不幸的是,每次客户端连接时,onBind()都会 。例如,请参见Hackborne夫人的回答:https://groups.google.com/d/msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ
一种可能的解决方案是从onUnbind()
返回true,并在onBind()
和onRebind()
上将标记设置为true(onUnbind()
上为false)。