replugin插件化,插件转场动画失效的问题解决

说明

  随着应用功能的丰富,Android程序的安装包也逐渐变大,这成为应用程序现有框架下难以摆脱的瓶颈。所以引入了rePlugin插件化框架,将应用按功能拆分为插件,以此减小apk的大小并同时增加应用的灵活性。rePlugin相关信息见此处 https://github.com/Qihoo360 

 

问题描述

  插件化开发过程中发现,插件程序中之前的转场动画出现异常,写在theme/styles中的动画会不展示,而在activity中调用 overridePendingTransition(int enterAnim, int exitAnim) 实现的专场动画会使程序卡死,黑屏。

 

问题解决

  分析发现出现这一问题的原因是插件程序中的anim资源不能正常访问;而rePlugin官方的FEQ也验证了我们的猜想

 

 出处见链接 https://github.com/Qihoo360/RePlugin/wiki/%E5%B1%80%E9%99%90%E5%92%8C%E6%9C%AA%E6%9D%A5%E5%A4%A7%E8%AE%A1%E5%88%92

 而解决思路也有两个

1.用系统的转场动画替换自定义的转场动画; 

实现:

跳转按钮的跳转方式:

startActivity(new Intent(this, ExplodeActivity.class), ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

在当前类(所要跳转的Activity页面) 中设置该Activity的进出场动画即可:

getWindow().setEnterTransition(new Explode().setDuration(2000));  
getWindow().setExitTransition(new Explode().setDuration(2000)); 

使用系统提供的转场动画避开了对anim资源的访问,解决了上述的问题。具体实现 https://blog.csdn.net/w630886916/article/details/78319502 

但是此方法会存在几个问题:

  • Android系统转场动画只支持5.0(sdk21)以上的系统;
  • 默认动画为Material Design风格动画,不一定与自己定义的动画完全一样
  • 退场动画只支持back出发而finish推出则不会出现退场动画。
  • 在singleTask模式下的退场动画不显示(原因不详)

2.将动画资源放在宿主中,通过public.xml传递Id进行资源访问;

由于第一种方式存在的诸多问题,我们推荐使用第二种方式,也是RePlugin官方提示的解决方式;

第一步:将插件中用到的anim资源复制到host宿主程序的anim目录下(如不存在手动添加);之后进行编译。

第二步:

 将宿主文件中anim资源对应的id写到宿主的public.xml中(关键步骤)

注:资源id为编译生成可在R文件中查看,public.xml为手动添加;  android public.xml 用法

第三步:将插件中用到的资源替换城宿主中public.xml对应的id

 

运行,完美解决。

 

posted @ 2018-08-02 16:17  Ivo-oo  阅读(694)  评论(0编辑  收藏  举报