# PerfService **Repository Path**: agrui/perf-service ## Basic Information - **Project Name**: PerfService - **Description**: Android Message分发性能监控 基于对象池的观察者模式,手动回收事件通知所产生的内存,特别用于大量事件通知时,减轻垃圾回收负担。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-05 - **Last Updated**: 2025-01-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: 对象池 ## README # PerfService #### 介绍 ##### Android Message分发性能监控 提供一种可以可以监控应用消息分发性能的方法。 ##### Android基于对象池的观察者模式设计 提供主题订阅,事件通知,对象池。对象池可以减少事件对象的重复创建,特别适用大量事件通知导致的内存高的场景,可以显著减少内存占用。 #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 观察者模式使用测试用例 ``` public class SubjectTest { private static final String TAG = "SubjectTest"; private Handler mHandler; private HandlerThread mHandlerThread; private Subject mTestSubject; private static final int EVENT_OBSERVER_1_IND = 1; private static final int EVENT_OBSERVER_2_IND = 2; @Before public void setUp() throws Exception { mHandlerThread = new HandlerThread("SubjectTest"); mHandlerThread.start(); mHandler = new Handler(mHandlerThread.getLooper()) { public void handleMessage(Message msg) { switch(msg.what) { case EVENT_OBSERVER_1_IND: { SamplyEventData event = (SamplyEventData)msg.obj; Log.d(TAG, "EVENT_OBSERVER_1_IND event value " + event.mValue); event.recycle(); break; } case EVENT_OBSERVER_2_IND: { SamplyEventData event = (SamplyEventData)msg.obj; Log.d(TAG, "EVENT_OBSERVER_2_IND event value " + event.mValue); event.recycle(); break; } default: break; } } }; } @Test public void testSubjectRegister() { mTestSubject = new Subject(); EventObserver observer1 = new EventObserver(mHandler, EVENT_OBSERVER_1_IND, null); mTestSubject.registerObserver(observer1); EventObserver observer2 = new EventObserver(mHandler, EVENT_OBSERVER_2_IND, null); mTestSubject.registerObserver(observer2); CompletableFuture.runAsync(() -> { try { Thread.sleep(100); for (int i=0; i<100; i++) { SamplyEventData event = SamplyEventData.obtain(); event.mValue = i; mTestSubject.notifyObservers(event); Thread.sleep(50); } } catch (InterruptedException ie) { // Do nothing. } }).join(); } } ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)