1. 全部 Activity 可继承自 BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效。
2. 数据库表段字段常量和 SQL 逻辑分离,更清晰,建议使用 Lite 系列框架 LiteOrm 库,超级清晰且重心可以放在业务上不用关心数据库细节。
3. 全局变量放全局类中,模块私有放自己的管理类中,让常量清晰且集中.
4. 不要相信庞大的管理类的东西会带来什么好处,可能是一场灾难,而要时刻注意单一职责原则,一个类专心做好一件事情更为清晰。
5. 如果数据没有必要加载,数据请务必延迟初始化,谨记为用户节省内存,总不会有坏处。
6. 异常抛出,在合适的位置处理或者集中处理,不要搞的到处是 catch,混乱且性能低,尽量不要在循环体中捕获异常,以提升性能。
7. 地址引用链长时(3 个以上指向)小心内存泄漏,和警惕堆栈地址指向,典型的易发事件是:数据更新了,ListView 视图却没有刷新,这时 Adapter 很可能指向并的并不是你更新的数据容器地址(一般为 List)。
8. 信息同步:不管是数据库还是网网络操作,新插入的数据注意返回 ID(如果没有赋予唯一 ID),否则相当于没有同步。
9. 多线程操作数据库时,db 关闭了会报错,也很可能出现互锁的问题,推荐使用事务,推荐使用自动化的 LiteOrm 库操作。
10. 做之前先考虑那些可以公用,资源,layout,类,做一个结构、架构分析以加快开发,提升代码可复用度。
11. 有序队列操作 add、delete 操作时注意保持排序,否则你会比较难堪喔。
12. 数据库删除数据时,要注意级联操作避免出现永远删不掉的脏数据喔。
13. 关于形参实参:调用函数时参数为基本类型传的是值,即传值;参数为对象传递的是引用,即传址。
14. listview 在数据未满一屏时,setSelection 函数不起作用;ListView 批量操作时各子项和视图正确对应,可见即所选。
15 控制 Activity 的代码量,保持主要逻辑清晰。其他类遵守 SRP(单一职能),ISP(接口隔离)原则。
16. arraylist 执行 remove 时注意移除 int 和 Integer 的区别。你懂得。
17. Log 请打上 Tag,调试打印一定要做标记,能定位打印位置,否则尴尬是:不知道是哪里在打印。
18. 码块/常量/资源可以集中公用的一定共用,即使共用逻辑稍复杂一点也会值得,修改起来很轻松,修改一种,到处有效。
19. setSelection 不起作用,尝试 smoothScrollToPosition。ListView 的 LastVisiblePosition(最后一个可见子项)会随着 getView 方法执行位置不同变动而变。
20. 与 Activity 通讯使用 Handler 更方便; 如果你的框架回调链变长,考虑监听者模式简化回调。
21. 监听者模式不方便使用时,推荐 EventBus 框架库,使用时间总线,没接触过的同学可以自行脑补一下哦。
22. Handler 在子线程线程使用 Looper.prepare,或者 new 的时候给构造函数传入 MainLooper 来确保在主线程 run。
23. timepicker 点击确定后需要 clearFocus 才能获取手动输入的时间。
24. 构造函数里面极度不推荐启动异步线程,会埋下隐患。比如:异步线程调用了本例的示例,就会悲剧等着崩溃吧。
25. 千万不要理所当然的以为一个对象不会为空,充分的做好容错处理;另外注意 null 也可以插入 ArrayList 等容器中。
26. ExpandableListView 的子列表不能点击(禁用)要把 Adapter 的 isChildSelectable 方法返回 true。
27. UI 显示注意内容过长的情形要提前使用 ScrollView 否则在小手机上尴尬你懂得。
28. 注意按钮的感应范围不小于 9mm 否则不易点击;输入框注意光标的位置更易用户输入。
29. 服务器和客户端尽量统一唯一标识(有可能是 ID),否则多少会有歧义和问题。
30. 注释,尽量去写足够的注释,去描述一下思路,达到看了可以明白某一块代码的效果。
31. 完整型数据一定要用 Sqlite 的 Transaction,大数据一定要用。粗略测试插入 100 个数据有 20 倍的提速,插入 1000 个数据就有 100 多倍的提速。
32. 避免 String=”null”的情况出现 String = null,=””都可以。避免出现 title=”无主题”这样的数据提交到数据库浪费空间。
33. 存在多个不同的 dbhelper 实例情况下,sqlitedatabase 对象必然存在不同的实例,多线程同时写入数据,轮流写入数据时会不定时的报 db is locked,引起崩溃,不管是操作同张表还是异表。读和写可以同时并发,轮流无规律的交替执行。同时写入数据时解决方案是用并发的每个线程都用事务,db 则不会 lock,按次整体写入。