# OpenEye_pl **Repository Path**: ysynwy/open-eye_pl ## Basic Information - **Project Name**: OpenEye_pl - **Description**: 一个Kotlin做的开眼项目 学习使用 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-24 - **Last Updated**: 2024-05-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 三.log日志封装:单例模式+策略者模式+构建者模式/面向接口和抽象开发 ## 1.日志输出策略:logcat/file文件/后台服务器 ## 2.在不修改代码的基础上,改变日志输出策略:通过接口和抽象开发,实现策略者模式 ## 3.策略者模式优点:灵活性高,在不修改代码的基础上切换不同策略,Glide磁盘缓存策略 DiskCacheStrategy.ALL:全部, DiskCacheStrategy.NONE:不缓存 DiskCacheStrategy.SOURCE:只缓存原始图片 DiskCacheStrategy.RESULT:只缓存转换后的图片 ## 4.构建者模式优点:构建者模式可以帮助构建复杂的对象(参数比较多的时候),将对象的构建过程分解成多个步骤,使得代码更加清晰和易于维护 Retrofit/OkHttp/Notification/Dialog ## 5.输出到文件中注意事项? (1)日志格式:方便调试 (2)线程安全:多个线程同时写入,需考虑线程安全问题 (3)性能考虑:IO操作是耗时的,需要考虑性能问题,放在异步中 (4)文件大小:文件过大,采用轮转机制,设置一个阈值,文件超过阈值创建新的文件存储 (5)日志级别控制:测试阶段等级低打印更多的日志,上线等级高,只打印必要的日志 (6)重复信息一直输出:每次写入前判断之前几行日志是否一样,若一样过滤掉 ## 6.输出到后台服务器中注意事项? (1)定期上传(例如根据日志数量或大小来触发上传操作),将日志文件上传到后台服务器,减少服务器的压力 (2)提取关键字,压缩格式,减少数据大小 (3)上传失败:断点续传,记录失败的进度,从断点继续上传 (4)上传成功:删除本地日志文件,增大磁盘内存 (5)安全性:防止内容被篡改,采用MD5加密 ##7.异常捕获/ANR捕获??? (1)异常捕获:Thread.UncaughtExceptionHandler 捕获异常---》封装崩溃信息(设备信息/版本信息/堆栈信息) 上传崩溃信息到后台--》测试人员给开发人员---》修复代码---》打补丁包---》上传到后台服务器 ## 五.Bitmap全部:BitmapFactory (1)Bitmap像素格式:ARGB_4444 ARGB_8888 RGB_565 (2)Bitmap内存大小:宽度*高度*一个像素所占字节数 (3)二次采样:缩略图、朋友圈九宫格、照片墙(显示压缩后图片,点击加载原图) a。第一次:只采宽高,不采像素,计算压缩比例 b。第二次:按照压缩比例采集像素 (4)三级缓存:内存缓存、磁盘缓存、网络缓存 a。先去内存取,有直接加载,没有去磁盘取 b。磁盘有直接加载,没有去网络取,将图片缓存到内存中 c。磁盘没有,去网络取,将图片缓存到内存和磁盘中 (5)三级缓存:LRU算法(*****)近期最少使用原则:缓存空间有限制,当图片无法再缓存的时候会将最近最少使用的图片删除掉,将缓存新的图片缓存进去 a。内存LRU:LruCache(底层使用LinkedHashMap保证近期最少使用原则) b。磁盘LRU:使用【操作日志】记录图片的访问顺序,删除不常用的图片 (6)质量压缩:Bitmap.compress(CompressFormat format, int quality, OutputStream stream) (7)色深和位深 色深:每个像素所占内存的位数,比如 ARGB_8888 色深32,内存大小 位深:每个像素所占计算机物理存储位置,文件大小 (8)质量压缩和尺寸压缩(二次采样) 尺寸压缩:减少像素的个数-----》改变在内存中的大小 质量压缩:改变位深-----》改变文件大小 (9)尺寸压缩: 比如:压缩比例为8 邻近采样:从8个像素点随机采样一个,简单粗暴 双线性采样:从8个像素点求平均值,再从挑选一个离平均值最接近的,避免锯齿