工作六年 我终于学会了这项技能 可惜晚了!!!


系统设计问题涉及的问题
1.功能需求——首先需要定义应用的用例和一些功能。 2.非功能性要求——定义性能、经验和规模要求。 3.假设——定义问题的边界、任何规模约束、特征等。 4.客户端-服务器通信——定义连接选项,如 HTTP 请求、轮询、服务器端事件。 5.API 设计——定义所构建的功能端点。 6.数据模型——定义对象的数据模型字段。 7.应用流程(用例流程) ——定义并执行正在设计的功能的用户流程。 8.性能和工具——定义大家将如何收集数据和指标以查看应用程序的性能包括内存利用率、CPU 利用率等。 9.ADA — 确保大家定义了辅助功能以及应用程序的可访问性。 10.国际化——随着应用程序在国际上的发展,需要处理这款系统应用的国际适配。 11.安全性——定义如何去保护应用程序。
具体实现



MVC——模型视图控制器 MVVM——模型视图视图模型 MVP——模型视图Presenter VIPER等

布局优化:
删除布局中无用的控件和层次,其次有选择地使用性能比较低的ViewGroup。 采用标签,标签,ViewStub. 避免过度绘制

绘制优化:
onDraw中不要创建新的局部对象。 onDraw方法中不要做耗时的任务,循环执行方法后十分抢占CPU的时间片,这会造成View的绘制过程不流畅
内存泄漏优化:
在开发过程中避免写出有内存泄漏的代码 通过一些分析工具比如MAT来找出潜在的内存泄露,然后解决。
响应速度优化:响应速度优化的核心思想就是避免在主线程中做耗时操作。 ListView/RecycleView及Bitmap优化
使用ViewHolder模式来提高效率 异步加载:耗时的操作放在异步线程中 ListView/RecycleView的滑动时停止加载和分页加载 对加载图片进行压缩,避免加载图片多大导致OOM出现。
线程优化:线程优化的思想就是采用线程池,避免程序中存在大量的Thread。 其他性能优化的建议 ① Show Skeleton - 某种东西正在加载的感知概念让用户感觉数据加载速度更快。在加载数据时显示一些 Skeleton 会对感知的用户体验产生巨大影响 ② 使用具有适当尺寸的图像。如果 API 支持高度和宽度作为查询参数,那么大家将能拿到对图片显示有意义的结果。用户的眼睛无法分辨图像大小之间的差异,但它因为加载的数据较少从而对应用程序的性能产生巨大影响。 ③ 使用内容交付网络 (CDN)进行静态图像缓存,以帮助更快地交付内容。在我们的App中,将 CDN 用于图像和静态内容,将地点描述文本和图像缓存至云端。 ④ 在后台线程上加载数据,这样主线程永远不会被阻塞,UI 永远不会卡住。
确保颜色对比度正确 每个目标尺寸至少为 44pt 为可访问性标注添加自定义调用 使用适当的配色方案 支持动态字体类型 对例如GTXilib 的库使用自动检查,以便他们可以确保每个 UI 元素都有一个标签、适当的特征、标签不是多余的。
使用签名和加密数据 编译与反编译 NDK与反汇编 加壳与脱壳
结论
有道无术,术可成;有术无道,止于术
欢迎大家关注Java之道公众号
好文章,我在看❤️
评论