获取activity跳转来源

406 阅读1分钟

前阵子恰好有朋友问到这个问题,给他讲了一下原理,这里简单分享一下

如何识别来源

核心:ActivityThread$ActivityClientRecord::referrer

简单来说这个referrer就是启动你act的包名

/**
 * 通过反射获取referrer
 * @return
 */
private String reflectGetReferrer() {
    try {
        Field referrerField =
        Activity.class.getDeclaredField("mReferrer");
        referrerField.setAccessible(true);
        return (String) referrerField.get(this);
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
    return "";
}

这是 adb启动act image.png

这是点launcher的icon - reflectGetReferrer is com.miui.home

image.png

源码分析篇

vivo团队的文章已经写的够好了

抛砖引玉 www.cnblogs.com/vivotech/p/…