StrictMode分析Registion-StrictMode原理(4)

本文详细探讨了Android ActivityThread在Context.stopService过程中如何检测Service和BroadcastReceiver的泄漏,并通过mReceivers和mServices成员变量进行清理。重点介绍了如何在removeContextRegistrations方法中分析并报告接收器和服务连接的泄漏情况,以及StrictMode在检测中的角色。

4. Registion的泄漏问题

这里的Registion主要有两种,分别是Service、BroadCastReceiver:

4.2 检测时机

这里先补充一个前置知识点,stopService的流程:

Context.stopSerivce  -> ActivityThread.STOP_SERVICE -> ActivityThread.scheduleContextCleanup() -> LoadApk.removeContextRegistrations

我们需要的检测时机,在removeContextRegistrations,这里面用到了两个成员变量:

//根据context,来存储当前的广播以及广播分发器   
private final ArrayMap<Context, ArrayMap<BroadcastReceiver, ReceiverDispatcher>> mReceivers
        = new ArrayMap<>();
//根据context,来存储service以及service的分发器
private final ArrayMap<Context, ArrayMap<ServiceConnection, LoadedApk.ServiceDispatcher>> mServices
        = new ArrayMap<>();
 public void removeContextRegistrations(Context context,
            String who, String what
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值