2. 调⽤ view 的 layout ⽅式修改位置,如弹幕组件等;
3. 通过修改 canvas 位置并且调⽤ invalidate(int l, int t, int r, int b)等⽅式限定刷新区域;
4. 通过设置⼀个是否允许 requestLayout 的变量,然后重写控件的 requestlayout、onSizeChanged ⽅法 , 判 断 控 件 的⼤⼩ 没 有
改 变 的 情况下 , 当 进 ⼊requestLayout 的时候,直接返回⽽不调⽤ super 的 requestLayout ⽅法。
9. 【推荐】不能在 Activity 没有完全显⽰时显⽰ PopupWindow 和 Dialog。
10.【推荐】尽量不要使⽤ AnimationDrawable,它在初始化的时候就将所有图⽚加载到内存中,特别占内存,并且还不能释放,释放之后下次进⼊再次加载时会报错。
11.【强制】不能使⽤ ScrollView 包裹 ListView/GridView/ExpandableListVIew;因为这样会把 ListView 的所有 Item 都加载到内存中,要消耗巨⼤的内存和 cpu 去绘制图⾯。
五、进程、线程与消息通信
安卓intent用法
1. 【强制】不要通过 Intent 在 Android 基础组件之间传递⼤数据(binder transaction缓存为 1MB),可能导致 OOM。
2. 【强制】在 Application 的业务初始化代码加⼊进程判断,确保只在⾃⼰需要的进程初始化。特别是后台进程减少不必要的业务初始化。
3. 【强制】新建线程时,必须通过线程池提供(AsyncTask 或者 ThreadPoolExecutor 或者其他形式⾃定义的线程池),不允许在应⽤中⾃
⾏显式创建线程。
4. 【强制】线程池不允许使⽤ Executors 去创建,⽽是通过 ThreadPoolExecutor 的⽅式,这样的处理⽅式让写的同学更加明确线程池的运
⾏规则,规避资源耗尽的风险。
5. 【强制】⼦线程中不能更新界⾯,更新界⾯必须在主线程中进⾏,⽹络操作不能在主线程中调⽤。
6. 【强制】不要在⾮ UI 线程中初始化 ViewStub,否则会返回 null。
7. 【推荐】尽量减少不同 APP 之间的进程间通信及拉起⾏为。拉起导致占⽤系统资源,影响⽤户体验。
8. 【推荐】新建线程时,定义能识别⾃⼰业务的线程名称,便于性能优化和问题排查。
9. 【推荐】ThreadPoolExecutor 设置线程存活时间(setKeepAliveTime),确保空闲时线程能被释放。
10. 【 推荐 】 禁 ⽌ 在多 进 程 之 间 ⽤ SharedPreferences 共 享数 据 , 虽 然 可 以(MODE_MULTI_PROCESS),但官⽅已不推荐。
11.【推荐】谨慎使⽤ Android 的多进程,多进程虽然能够降低主进程的内存压⼒,但会遇到如下问题:
不能实现完全退出所有 Activity 的功能;
⾸次进⼊新启动进程的页⾯时会有延时的现象(有可能⿊屏、⽩屏⼏秒,是⽩屏还是⿊屏和新 Activity 的主题有关);
应⽤内多进程时,Application 实例化多次,需要考虑各个模块是否都需要在所有进程中初始化;
多进程间通过 SharedPreferences 共享数据时不稳定。
六、⽂件与数据库
1. 【强制】任何时候不要硬编码⽂件路径,请使⽤ Android ⽂件系统 API 访问。
2. 【强制】当使⽤外部存储时,必须检查外部存储的可⽤性。
3. 【强制】应⽤间共享⽂件时,不要通过放宽⽂件系统权限的⽅式去实现,⽽应使⽤FileProvider
4. 【推荐】SharedPreference 中只能存储简单数据类型(int、boolean、String 等),复杂数据类型建议使⽤⽂件、数据库等其他⽅式存

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。