Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: 保持Fragment类型不变的情况下支持Fragment正常工作 #312

Merged
merged 3 commits into from
Apr 19, 2020

Conversation

shifujun
Copy link
Collaborator

@shifujun shifujun commented Apr 18, 2020

Fragment支持的相关代码是非常早期的代码。当时对字节码编辑还不是很熟练。

由于插件Activity变成了ContainerActivity持有的普通类ShadowActivity,而插件Fragment会被直接添加到ContainerActivity上,造成插件Fragment中取得的Activity都是ContainerActivity,而原本预期应该获得插件原本的Activity对象。为了解决这个问题,当时将Fragment的父类都改成了ShadowFragment普通类,又搞了一个ContainerFragment。又连带着搞出了PluginFragmentManger。由于Fragment的父类是普通类了,所以Fragment上原本的方法都要一个一个实现,Shadow也没能都实现。

总之之前的Fragment实现代码效果不尽如人意。其实Shadow开发到后期,解决了更多问题之后,一直就知道这个Fragment的实现方式应该是可以优化的,应该是可以保持Fragment类型不变的。最近终于挤出了点时间重构这里。

初步实现的代码工作得还比较正常,由于写了自动化测试,所以还比较有信心。
——————
对Fragment中涉及Activity类型的方法进行字节码编辑,在调入调出前后相互转换ContainerActivity和PluginActivity。

现在Fragment不会被改名,所以能正常Debug了。

测试用例考虑了如下情况:
1.Fragment是系统Fragment的直接子类、间接子类;
2.Fragment父类是DialogFragment(父类是系统类);
3.Fragment以代码方式添加和Xml方式添加;
4.Fragment作为其他Fragment的父类;
5.Fragment的父类只Override了Context版本或Activity版本的方法,或者同时Override了。
6.测试了API28和API19两款模拟器;

fix #168

related issues: #307, #285, #242, #243, #165, #151, #115, #24

@shifujun shifujun changed the title WIP: 重构Fragment支持 重构Fragment支持 Apr 19, 2020
@shifujun shifujun changed the title 重构Fragment支持 feat: 保持Fragment类型不变的情况下支持Fragment正常工作 Apr 19, 2020
对Fragment中涉及Activity类型的方法进行字节码编辑,在调入调出前后相互转换ContainerActivity和PluginActivity。

现在Fragment不会被改名,所以能正常Debug了。

测试用例考虑了如下情况:
1.Fragment是系统Fragment的直接子类、间接子类;
2.Fragment父类是DialogFragment(父类是系统类);
3.Fragment以代码方式添加和Xml方式添加;
4.Fragment作为其他Fragment的父类;
5.Fragment的父类只Override了Context版本或Activity版本的方法,或者同时Override了。
6.测试了API28和API19两款模拟器;

fix Tencent#168

related issues: Tencent#307, Tencent#285, Tencent#242, Tencent#243, Tencent#165, Tencent#151, Tencent#115, Tencent#24
@shifujun shifujun merged commit f1d0f5b into Tencent:master Apr 19, 2020
@shifujun shifujun deleted the fragment_support branch April 19, 2020 15:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Fragment的生命周期方法实现不正确
1 participant