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

tun*_*ing 13 service android android-activity

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

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

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

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

谢谢,J

Sha*_*ley 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;
}
Run Code Online (Sandbox Code Playgroud)

仅当所有客户端都已断开连接时才会调用onUnbind .因此绑定将保持为真,直到所有客户端断开连接.

**注:根据Gil的反馈进行编辑.**


Gil*_*ach 11

我不能评论SharkAlley的答案,所以我在这里重播.

不幸的是,每次客户端连接时都不会调用onBind().例如,请参阅Hackborne夫人的回答:https://groups.google.com/d/msg/android-developers/2IegSgtGxyE/iXP3lBCH5SsJ

一种可能的解决方案是返回true,onUnbind()并将标志设置为true,onBind()并打开和onRebind()(和false onUnbind()).