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

热更完成后回到功能界面上随意点出现很多ClassCastException #30

Closed
goatatop opened this issue Oct 19, 2016 · 5 comments
Closed

Comments

@goatatop
Copy link

why? 退出重进的话也会出现很多类无法强转的问题

@limpoxe
Copy link
Owner

limpoxe commented Oct 20, 2016

more detail

@goatatop
Copy link
Author

java.lang.ClassCastException: AAAA cannot be cast to AAAA

at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1223)
at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1240)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

@limpoxe
Copy link
Owner

limpoxe commented Oct 21, 2016

这是因为在插件生命周期之外持有了插件对象的引用。就像内容泄露一样。这种情况框架感知不到。所以在热更新的时候这些引用清理不了。举个简单例子:宿主Activity中定义了一个成员变量,指向了插件中的一个对象。然后插件热更新完成后,这个宿主的Activity中的那个成员变量仍然是指向上个版本插件中的对象。这种情况框架是探测不到的。所以应该尽可能将插件当成整体功能使用,而不是看做成代码片段来使用。

@goatatop
Copy link
Author

@limpoxe 所以我现在做的这种只取代码片段的插件化其实是违背的初衷了么,或者说或许我应该换种方案去实现嘛= =

@limpoxe
Copy link
Owner

limpoxe commented Oct 21, 2016

也不能说完全是违背初衷。我说的是尽可能的自律和绕行、使用标准的app之间的交互方式进行交互。但是不排除实际的场景中确实有特殊需求。所以框架中才会提供对控件级插件、fragment插件以及local service的支持。但是对这几种用法,也是要求尽可能不要在宿主中直接访问和获取这些对象。而是仅仅在宿主中提供一个显示区域而已,其他的东西全部收敛在插件组件内。如果确实要发生交叉访问,也尽量使用消息来解藕。

@limpoxe limpoxe closed this as completed Nov 9, 2016
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

No branches or pull requests

2 participants