## 1. 新增监控项的流程 1. 在 QPMFloatViewType 中新定义一种类型:TYPE_FLOAT_VIEW_NEW_TYPE,并添加到 @StringDef 中 2. 在 QPMFloatViewManager 的 构造方法中,注册 TYPE_FLOAT_VIEW_NEW_TYPE - 参数1:新建的类型 - 参数2:开关页面显示的名字 - 参数3:开关页面显示的二级提示字符串,可为null - 参数4:开关是否默认打开 - 参数5:开关的默认排序,也对应了在悬浮窗上的展示顺序,注意不要和已有功能排序相同,不然可能会出现无法预知的问题 ``` typeBeans.add(new QPMFloatViewBean(QPMFloatViewType.TYPE_FLOAT_VIEW_NEW_TYPE, "开关显示名", "开关二级提示,可为null", false, 18)); ``` 3. 在 QPMRAnalysisResult 中新建对应的数据实体类型 4. 在 analysis 包下新建一个 Analysis,用于将数据设置在 QPMRAnalysisResult 中 5. 在 floatview/renderer 包下新建一个 Renderer,继承 BaseRenderer 或实现 IFloatViewRenderer,完成布局与数据的绑定操作。可参考同类 Renderer 的实现方式 6. 在 executor 包下新建一个 Executor,实现 IExecutor 接口,在 exec 方法中完成数据的获取。可参考同类 Executor 的实现方式 7. 在 QPMDaemonComponent 类的构造方法中,添加刚才新建的执行器 ``` executors.add(new QPMNewTypeExecutor()); ``` ## 2. 注意事项 1. 新增的 Executor 如果放在 QPMDaemonComponent 中,则默认是在子线程中执行的 2. 如果需要单独开一个线程,不要直接 new Thread,要用 QPMThreadManager 进行新建线程操作,否则会影响悬浮窗上线程数的精确度 3. 如果默认的 QPMDaemonComponent 不能满足需求,则在 service 包下新建 Component 类,继承 QPMBaseService,然后在 QPMFloatViewManager 类中完成这个 Component 的开启与关闭操作 4. 如果新建的选项在开关页面展示上有特殊处理,比如 API > xx 才展示,则在 FloatViewSwitchFunction 的 initData 方法中特殊处理 5. 如果开启或关闭开关后有特殊的触发事件,可以在 FloatViewSwitchFunction 的 initData 方法中添加回调,也可以在 QPMFloatViewManager 的 refreshFloatViewAndComponent 中批量处理