StrictMode卡顿与泄漏检测-StrictMode原理(2)

本文详细解析了Android中的StrictMode关闭检测原理,包括CloseGuard如何进行IO关闭检测,防止资源泄漏。同时,探讨了BlockGuardOS如何检测IO卡顿,并介绍了SqliteCursor的泄漏检测机制,帮助开发者提升应用性能和稳定性。

2. StrictMode关闭检测原理

StrictMode的关闭检测其实是比较简单的,基本上就是在开启的时候埋桩,释放的时候检测桩子是否有关闭,没有关闭则检测为泄漏。

2.1 CloseGuard

这里有一个预备知识,那就是CloseGuard,它是一个StrictMode专门为了处理此类事情的类,主要包括三个函数:

  • open 开始埋桩
  • close 拆桩
  • warnIfOpen 爆炸
SystemApi(client = MODULE_LIBRARIES)
@libcore.api.IntraCoreApi
public final class CloseGuard {
   
   

    private static volatile boolean stackAndTrackingEnabled = true;

    private static volatile Reporter reporter = new DefaultReporter();

    private static volatile Tracker currentTracker = null; // Disabled by default.

    @UnsupportedAppUsage
    @SystemApi(client = MODULE_LIBRARIES)
    public static void setEnabled(boolean enabled) {
   
   
        CloseGuard.stackAndTrackingEnabled = enabled;
    }


    public static boolean isEnabled() {
   
   
        return stackAndTrackingEnabled;
    }


    @UnsupportedAppUsage(trackingBug=111170242)
    @SystemApi(client = MODULE_LIBRARIES)
    @libcore.api.IntraCoreApi
    public void open(String closer) {
   
   
        openWithCallSite(closer, null /* callsite */);
    }

		//关闭之前,
    @UnsupportedAppUsage
    @SystemApi(client = MODULE_LIBRARIES)
    @libcore.api.IntraCoreApi
    public void close() {
   
   
        Tracker tracker = currentTracker;
        if (tracker != null && closerNameOrAllocationInfo instanceof Throwable) {
   
   
            // Invoke tracker on close only if we invoked it on open. Tracker may have changed.
            tracker.close((Throwable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值