当 AppX 调用 Service 然后调用 ServiceS 时,调用 Uid 是啥?

Posted

技术标签:

【中文标题】当 AppX 调用 Service 然后调用 ServiceS 时,调用 Uid 是啥?【英文标题】:What's the CallingUid when AppX calls ServiceY which then calls ServiceZ?当 AppX 调用 Service 然后调用 ServiceS 时,调用 Uid 是什么? 【发布时间】:2014-07-10 23:56:30 【问题描述】:

来自 android API 文档:Binder.getCallingUid() 返回分配给向您发送当前正在处理的事务的进程的 Linux uid。当 AppX 调用 ServiceY 和 ServiceY 调用getCallingUid() 时,它会得到 X 的 UID。

我的问题是:当AppX调用ServiceY,ServiceY依次调用ServiceZ时,Z观察到的调用UID是什么?

如果 Y 和 Z 在同一个进程中会有所不同吗?

【问题讨论】:

【参考方案1】:

如果App X调用Service Y,Service Y调用Service Z,当Service Z调用getCallingUid()时,它会取回Service Y的UID。即使Y和Z在同一个进程中也是如此因为每个调用都被视为一个单独的 Binder 事务。

【讨论】:

我发现,如果 Y 和 Z 在同一个进程中,getCallingUid() 返回 X。Y 和 Z 之间的 Binder 调用变成了普通的本地函数调用。

以上是关于当 AppX 调用 Service 然后调用 ServiceS 时,调用 Uid 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用Messenger进行Activity与Service之间的相互通信

如何在pb9中调用WebService

当Activity被销毁时,为什么Service会破坏自我?

前台服务问题 - 然后没有调用 Service.startForeground()

Android进阶学习

Odoo Web Service API