exampleModuleModel_leak_fix_side_effect_correct_strategy

##

目的

  • 解决因修改exampleModule泄露导致的onUnBind/unbind调用模糊的问题
  • 梳理exampleModule的主题切换流程逻辑

问题

  • 部分类实现了onUnBind/unbind,但具体逻辑并不符合unbind(即完全释放)的预期
  • 有些类实现了onUnBind/unbind,但并不是在销毁时调用(如:切换主题),直接调用会出问题
  • 部分逻辑调用了onUnBind/unbind,但具体的类里却是空实现
  • 有的类同时实现了onUnBind/unbind两者,onUnBind为空/unbind为空

解决方案

在unbind方法中加参数,对解绑动作做出具体的调用级区分,差异化实现逻辑,而不是像之前的方案一样统一都做销毁级别的处理

主题切换流程

  • 入口:ThemeMineList
  • 具体调用栈
    • 流程图:
1
2
3
4
5
6
7
graph TB
A[ThemeMineList] -->|onClick-applyTheme| B(PageAcitvity)
B -->|applyTheme| C[进程间通信ThemeApplyControllerImpl]
C -->|applyTheme| D[ThemeResourceManager]
D -->|startApplyTheme -- applyAll | E[HostThemeCallBack]
E -->|onApplyAll| F[rebind flow]
F -->|Flow| H[callBindRunnable unbind/bind]
  • 具体类名、方法名:
    • ThemeMineList – onClick() – applyTheme()
      • PageAcitvity.applyTheme() – 进程间通信
        • ThemeManagerService$ThemeApplyControllerImpl.applyTheme
          • ThemeResourceManager.startApplyTheme – applyAll
            • exampleModuleModel$HostThemeCallBack.onApplyAll() – rebind – callBindRunnable() – unbind/bind

涉及场景

  1. 点击清理图标动画没有完成时,切换主题
  2. 不保留活动,点击清理图标动画没有完成时进另一个Activity
  3. 改变AlertClockAppWidget的3D模式,原本的exampleModule代码里并没有实现具体onUnBind逻辑
  4. 删除快捷方式/删除桌面Widget
  5. 卸载应用
  6. 不保留活动,反复切换exampleModule至前台/后台

具体内容

onUnBind

调用——

  1. exampleModuleModel——MarketShortcutInfo
  2. DeleteDropTarget——CustomShortcutInfo
  3. AllAppsView——CustomShortcutInfo
  4. DeleteDropTarget——CustomAppWidgetInfo // remove widget from workspace
  5. exampleModule——AlertClockAppWidget// switch alert clock widget
  • destroy — MarketShortcutInfo
  • switchAlertClockWidget — AlertClockAppWidget
  • uninstallApp — CustomShortcutInfo
  • deleteDropTarget — CustomAppWidgetInfo
  • — CleanMemoryShortcutInfo
  • — ThemeShortcutInfo

Powered by KyleCe

Copyright © 2015 - 2019 KyleCe All Rights Reserved.

访客数 : | 访问量 :