Android服务如何知道它不受任何活动的约束

时间:2010-06-05 14:48:19

标签: android service android-activity

我有一个Android服务,即使在最后一个Activity从堆栈中弹出,或者用户已选择执行其他操作,我仍希望继续运行。

本质上,服务正在侦听远程服务器上的更改,当且仅当应用程序中的活动未运行(或可见)时,我才想生成通知。换句话说,我不希望在用户直接与应用程序交互时发生通知。

在用户直接与应用程序交互的情况下,服务将通知活动并根据更改更新相应的UI元素。我计划通过观察者模式实现这一点。

如果没有应用程序活动绑定到它,服务如何知道?

谢谢, Ĵ

2 个答案:

答案 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)。