##
目的
- 解决因修改exampleModule泄露导致的onUnBind/unbind调用模糊的问题
- 梳理exampleModule的主题切换流程逻辑
问题
- 部分类实现了onUnBind/unbind,但具体逻辑并不符合unbind(即完全释放)的预期
- 有些类实现了onUnBind/unbind,但并不是在销毁时调用(如:切换主题),直接调用会出问题
- 部分逻辑调用了onUnBind/unbind,但具体的类里却是空实现
- 有的类同时实现了onUnBind/unbind两者,onUnBind为空/unbind为空
解决方案
在unbind方法中加参数,对解绑动作做出具体的调用级区分,差异化实现逻辑,而不是像之前的方案一样统一都做销毁级别的处理
主题切换流程
- 入口:ThemeMineList
- 具体调用栈
- 流程图:
1 | graph TB |
- 具体类名、方法名:
- ThemeMineList – onClick() – applyTheme()
- PageAcitvity.applyTheme() – 进程间通信
- ThemeManagerService$ThemeApplyControllerImpl.applyTheme
- ThemeResourceManager.startApplyTheme – applyAll
- exampleModuleModel$HostThemeCallBack.onApplyAll() – rebind – callBindRunnable() – unbind/bind
- ThemeResourceManager.startApplyTheme – applyAll
- ThemeManagerService$ThemeApplyControllerImpl.applyTheme
- PageAcitvity.applyTheme() – 进程间通信
- ThemeMineList – onClick() – applyTheme()
涉及场景
- 点击清理图标动画没有完成时,切换主题
- 不保留活动,点击清理图标动画没有完成时进另一个Activity
- 改变AlertClockAppWidget的3D模式,原本的exampleModule代码里并没有实现具体onUnBind逻辑
- 删除快捷方式/删除桌面Widget
- 卸载应用
- 不保留活动,反复切换exampleModule至前台/后台
具体内容
onUnBind
调用——
- exampleModuleModel——MarketShortcutInfo
- DeleteDropTarget——CustomShortcutInfo
- AllAppsView——CustomShortcutInfo
- DeleteDropTarget——CustomAppWidgetInfo // remove widget from workspace
- exampleModule——AlertClockAppWidget// switch alert clock widget
- destroy — MarketShortcutInfo
- switchAlertClockWidget — AlertClockAppWidget
- uninstallApp — CustomShortcutInfo
- deleteDropTarget — CustomAppWidgetInfo
- — CleanMemoryShortcutInfo
- — ThemeShortcutInfo