Android 安卓:绑定服务在被杀死的客户端上能被注意到多少?
我有一个活动和服务绑定到它 若服务被系统终止,则会注意到它的活动,因为将调用 但当系统终止活动的进程时,是否有对服务的回调?服务如何知道客户端已被杀死?(不幸的是,当整个进程被终止时,没有Android 安卓:绑定服务在被杀死的客户端上能被注意到多少?,android,service,android-activity,kill,Android,Service,Android Activity,Kill,我有一个活动和服务绑定到它 若服务被系统终止,则会注意到它的活动,因为将调用 但当系统终止活动的进程时,是否有对服务的回调?服务如何知道客户端已被杀死?(不幸的是,当整个进程被终止时,没有onDestroy()方法调用) 我现在看到的唯一方式是: 我的服务中有回调列表: RemoteCallbackList<IModConnClient> mCallbacks RemoteCallbackList mCallbacks 当我通过调用mCallbacks.beginBroadcas
onDestroy()
方法调用)
我现在看到的唯一方式是:
我的服务中有回调列表
:
RemoteCallbackList<IModConnClient> mCallbacks
RemoteCallbackList mCallbacks
当我通过调用mCallbacks.beginBroadcast()开始广播时代码>它返回给我许多客户端。所以,我可以记住以前的客户数量,并检查它是否减少了。但这似乎不是一个真正好的解决方案。我想回电话,但不幸的是我找不到
有人能给我一个建议吗?我找到了解决办法
如中所述,“如果注册回调的进程消失,此类将负责自动将其从列表中删除。如果您想在这种情况下执行其他工作,可以创建一个子类来实现onCallbackDied(E)方法。”
因此,我为RemoteCallbackList
和interfaceiremotecallbacklist
创建了一个子类:
private interface IRemoteCallbackDied<E extends IInterface> {
public void remoteCallbackDied(E callback, Object cookie);
}
private final class RemoteCallbackListWithDiedCB<E extends IInterface> extends RemoteCallbackList<E> {
IRemoteCallbackDied<E> mRemoteCallbackDied;
public RemoteCallbackListWithDiedCB(IRemoteCallbackDied<E> mRemoteCallbackDied)
{
this.mRemoteCallbackDied = mRemoteCallbackDied;
}
@Override public void onCallbackDied(E callback, Object cookie){
super.onCallbackDied(callback, cookie);
this.mRemoteCallbackDied.remoteCallbackDied(callback, cookie);
}
}
private final IRemoteCallbackDied<IModConnClient> mRemoteCallbackDied = new IRemoteCallbackDied<IModConnClient>() {
public void remoteCallbackDied(IModConnClient mModConnClient, Object cookie)
{
Log.v("my_tag", "remote callback died!");
/*
* Some code
*/
}
};
最后,我的回调列表定义如下:
private RemoteCallbackListWithDiedCB<IModConnClient> mClients = new RemoteCallbackListWithDiedCB<IModConnClient>(mRemoteCallbackDied);
private RemoteCallbackListWithDiedCB mClients=new RemoteCallbackListWithDiedCB(mRemoteCallbackDied);
还有一个简单的解决方案。这是一种服务方式。当一个活动被杀死时,它会让你知道。在文件上。上面写着
公共void onTaskRemoved(Intent rootIntent)
在API级别14中添加
如果服务当前正在运行,并且用户已删除来自服务应用程序的任务,则调用此函数。如果您已使用任务设置ServiceInfo.FLAG\u STOP\u,则不会收到此回调;相反,服务将简单地停止
参数
rootIntent用于启动要删除的任务的原始根意图
如果您想知道在没有onDestroy的情况下整个进程何时被终止,您需要知道。有一个问题
我希望这个答案能在另一方面帮助您:)为什么您的活动和服务不在同一个过程中?@commonware,这是因为我需要创建一个服务,该服务将使用AIDL
与其他应用程序通信。我的出发点是这个开发指南:。我在AndroidManifest.xml中为该服务添加了android:process=“:remote”
。谢谢,但onTaskRemoved
方法仅在API级别14中添加,但目前我们针对的是API级别为7的设备。谢谢你提供的信息。