一个百度安卓面试题
2022-12-07 本文已影响0人
在岁月中远行
问:ActivityA跳转到ActivityB,ActivityB中如何拿到ActivityA的View对象?PS:ActivityA是SDK中的类,无法修改。
原理就是从framwork层去思考:所有的activity的View其实都会注册到WindowManagerGlobal中,所以通过反射拿到WindowManagerGlobal对象,也可以获取到上一个activity的View。



1 我们通过反射

去拿到mViews,其实这里面存的是这里是Activity(不限于Dialog等等)的window的DercorView。

2 拿到MainActivity对应window的drcorView。然后根据View它是一种树结构遍历出我们想要的View

至于id怎么来 View类型怎么来,可以通过Layout Inspector来查看
3 通过接口把View暴露出去,可以进行自己的业务逻辑了。

ps:当然我们val mView = WindowUtils.getWindowViews()这是在第二个Actviity的onCrate方法里调用的,所以mView没有第二个Activity对应的decorview。如果延迟一下就可以拿到了。
还有 这里我们现在只有两个Activity,所以拿到就是第一个,当然也可以指定获取Actvity实例,application中注册cycleLife,拿到所有的activity对象,指定目标activity对象。