调用startActivityForResult后如何检测第三方应用Activity所属进程死亡?
调用startActivityForResult启动第三方Activity后,能否检测到其进程死亡?
咱先直接给结论:能检测到,但默认情况下系统不会通过onActivityResult给你抛这个回调——就像你碰到的场景,第三方邮件客户端进程崩了,你的App完全没收到回调通知。
你的特殊场景拆解
你贴的这条系统日志已经很说明问题了:
04-30 17:07:28.408 4223-4634/? I/ActivityManager: Process com.citrix.mail.droid (pid 26179) has died(120,858)
这是ActivityManager输出的系统级日志,说明系统本身已经察觉到第三方进程挂了,但为啥你的onActivityResult没触发?原因就是你后来补充的:当目标Activity所属的进程在启动阶段直接死亡(比如还没走完onCreate就崩了),系统不会触发调用方的onActivityResult回调。这种情况确实是个极端特例,只在特定设备上出现,刚好被你碰到了,也符合你说的“之前正常、其他设备能跑”的描述。
几种可行的检测方式
如果需要在这种特殊场景下主动检测进程死亡,可以试试这些方法:
- 监听系统日志:像你已经拿到的那条日志,就是系统给出的明确信号。可以通过读取系统日志并过滤目标包名的进程死亡信息来检测,但要注意,Android 10及以上版本对
READ_LOGS权限做了严格限制,普通App可能只能读取自身的日志,需要做适配。 - 定时检测进程存活状态:通过
ActivityManager.getRunningAppProcesses()或者PackageManager的相关API,定时检查目标第三方包的进程是否存活。不过这个方法在高版本系统上也有隐私限制,而且定时轮询会有一定性能消耗,适合临时排查问题用。 - 结合前台状态间接判断:如果你的App在启动第三方Activity后,长时间处于后台且没有收到任何回调,可以结合自身App的生命周期变化,间接判断可能出现了异常,但这种方法不够精准,只能做辅助判断。
内容的提问来源于stack exchange,提问作者user1317422
相关产品推荐
相关产品推荐

