[Android]Android APP Bundle插件化使用overridePendingTransition的坑

    因为要减少APK体积,考虑使用Android APP Bundle,将某个模块放入到spilt app中动态加载,过程中遇到了overridePendingTransition这个大坑。

    情况是分离出的模块里又个Activity,使用了overridePendingTransition这个方法,传入的anim存在于该模块当中。在运行的时候,发现该Activity切换时,出现了crash,如图所示:

[Android]Android APP Bundle插件化使用overridePendingTransition的坑

    Unhandled exception while laying out windows , 一个Resource的NotFoundException。引起崩溃的是Activity的overridePendingTransition方法,而我查了下,所用的那个anim的ID在spilt app的resources.arsc中是存在的,这个时候一路查询源码:

Activity:

[Android]Android APP Bundle插件化使用overridePendingTransition的坑

ActivityManagerService:

[Android]Android APP Bundle插件化使用overridePendingTransition的坑

WindowManagerService:

[Android]Android APP Bundle插件化使用overridePendingTransition的坑

AppTransition:

[Android]Android APP Bundle插件化使用overridePendingTransition的坑

然后找到了AppTransition去加载Animation资源的方法:

[Android]Android APP Bundle插件化使用overridePendingTransition的坑[Android]Android APP Bundle插件化使用overridePendingTransition的坑

这里就是抛出异常的地方。这算是一个坑吧。源码在这里获取anim资源,是在宿主APP中获取的,而现在这个资源是存在于spilt app当中的,因此抛出异常。

解决方法:看到有的人说把anim资源copy到宿主APP就成了,但是我试了下,并不行,因为Android的资源是根据ID查找的,copy到宿主APP的anim ID跟spilt app中的ID并不一样。因此,目前我能想到的解决方法就是在spilt app中不要使用overridePendingTransition了。