读《阿里巴巴 Android 开发手册》记录

1. 【强制】Activity 间的数据通信,对于数据量比较大的,避免使用 Intent + Parcelable

的方式,可以考虑 EventBus 等替代方案,以免造成 TransactionTooLargeException。

2.【推荐】Activity#onSaveInstanceState()方法不是 Activity 生命周期方法,也不保证
一定会被调用。它是用来在 Activity 被意外销毁时保存 UI 状态的,只能用于保存临
时性数据,例如 UI 控件的属性等,不能跟数据的持久化存储混为一谈。持久化存储
应该在 Activity#onPause()/onStop()中实行。

3. 【强制】Activity 间通过隐式 Intent 的跳转,在发出 Intent 之前必须通过 resolveActivity
检查,避免找不到合适的调用组件,造成 ActivityNotFoundException 的异常。 读《阿里巴巴 Android 开发手册》记录

4.【推荐】不要在 Activity#onDestroy()内执行释放资源的工作,例如一些工作线程的
销毁和停止,因为 onDestroy()执行的时机可能较晚。可根据实际需要,在
Activity#onPause()/onStop()中结合 isFinishing()的判断来执行。

5. 【推荐】当前Activity的onPause方法执行结束后才会执行下一个Activity的onCreate
方法,所以在 onPause 方法中不适合做耗时较长的工作,这会影响到页面之间的跳
转效率。

6.【推荐】使用 Toast 时,建议定义一个全局的 Toast 对象,这样可以避免连续显示
Toast 时不能取消上一次 Toast 消息的情况(如果你有连续弹出 Toast 的情况,避免
使用 Toast.makeText)。

读《阿里巴巴 Android 开发手册》记录

7.【强制】使用 Adapter 的时候,如果你使用了 ViewHolder 做缓存,在 getView()的
方法中无论这项 convertView 的每个子控件是否需要设置属性(比如某个 TextView
设置的文本可能为 null,某个按钮的背景色为透明,某控件的颜色为透明等),都需
要为其显式设置属性(Textview 的文本为空也需要设置 setText(""),背景透明也需要
设置),否则在滑动的过程中,因为 adapter item 复用的原因,会出现内容的显示错
乱。

8.【强制】布局中不得不使用 ViewGroup 多重嵌套时,不要使用 LinearLayout 嵌套,
改用 RelativeLayout,可以有效降低嵌套数。

9.【 推 荐 】 SharedPreference 提 交 数 据 时 , 尽 量 使 用 Editor#apply() , 而 非
Editor#commit()。一般来讲,仅当需要确定提交结果,并据此有后续操作时,才使
用 Editor#commit()。
说明:
SharedPreference 相关修改使用 apply 方法进行提交会先写入内存,然后异步写入
磁盘,commit 方法是直接写入磁盘。如果频繁操作的话 apply 的性能会优于 commit,

apply 会将最后修改内容写入磁盘。但是如果希望立刻获取存储操作的结果,并据此
做相应的其他操作,应当使用 commit。

10.【推荐】应根据实际展示需要,压缩图片,而不是直接显示原图。手机屏幕比较小,
直接显示原图,并不会增加视觉上的收益,但是却会耗费大量宝贵的内存。

读《阿里巴巴 Android 开发手册》记录