美文网首页
一个百度安卓面试题

一个百度安卓面试题

作者: 在岁月中远行 | 来源:发表于2022-12-07 23:58 被阅读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对象。

相关文章

网友评论

      本文标题:一个百度安卓面试题

      本文链接:https://www.haomeiwen.com/subject/owtnfdtx.html