写个笔记,方便回顾。
Android 资源文件命名与使用
1.drawable下命名方式采用
模块名_业务功能描述_控件描述_控件状态限定词 例如:module_login_btn_pressed
2.颜色命名,之前觉得项目中命名混乱,索性改为color_349132之类避免颜色值重复。看了这里思考了下,还是以模块+逻辑+颜色为好,便于某些好多控件共用一种颜色,需求变更,修改其中一些控件颜色的情况下方便修改。
3.控件id命名逻辑+后缀缩写 list_lv
其实命名这回事,定一个规则,项目成员遵守即可,方便开发和维护了。
Android 基本组件
1.Activity之间避免通过intent传递大对象。
2.生命周期成对处理逻辑。onSaveInstanceState()不属于生命周期方法,不保证一定被调用。
3.Activity通过隐式调用,必须通过resolveActivity检查,避免not found异常。
4.Broadcast onReceive()超过10s,可能会ANR。
5.应用内广播推荐本地广播。
6.添加fragment,推荐在onPostResume()或者onResumeFragments()中commit
7.不推荐在Activity#onDestory()中释放资源,执行时机较晚,推荐在onStop中结合标志位来处理
8.不推荐嵌套Fragment
9.隐式intent启动或绑定service,必须搭配setPackage(),消除目标服务的不确定性。
10.广播优先使用本地广播,安全性和高效率
11.当前Activity的onPause执行完才会执行下一个Activity的onCreate,不推荐在onPause做耗时操作
12.Application禁止缓存数据
UI 与布局
Hierarachy Viewer工具或者开发者模式下打开视图边界查看。
2.对话框/浮层推荐使用DialogFragment,便于管理生命周期。
3.禁止在布局时多次为子 view和父view设置相同的背景色,避免重复绘制
4.在需要时刻刷新某一区域的组件时,为避免全局layout刷新建议1.设置固定的view大小的宽高。2.调用view的layout方式修改位置,比如弹幕。3.通过canvas限制刷新区域。4.重写控件的requestLayout()和onSizeChange(),控件大小不改变时,进入requestLayout()时,不调用父控件的requestLayout。
5.不推荐AnimationDrawable,初始化时会加载所有图片到内存。
6.不建议ScrollView中包裹ListView/GridView/ExpandableListView,会把listView所有Item都加载到内存中,过度消耗资源。推荐使用NestedScrollView
进程、线程与消息通信
1.intent不要在组件中传递超过IM的大数据,会OOM或者失败。
2.多进程情况下,注意Application中加载各自进程需要的资源。
3.禁止直接new Thread,使用AsyncTask或者TheadPoolExecutor处理。
4.线程池创建时注意允许线程最大数量和线程存活时间。
文件与数据库
1.文件路径禁止硬编码,使用系统api。
2.使用外部存储时,必须检查外部存储可用性。
3.应用间共享文件推荐使用FileProvider
4.SP提交数据时,推荐使用apply,异步写入磁盘。commit是立刻写入磁盘。
5.多线程操作数据库时,需要使用事务。
6.大量数据写入数据库时,使用事务可以提高效率。
Bitmap、Drawable和动画和安全
1.png必须使用tinypng类似压缩工具处理
2.推荐使用inBitmap重复利用内存空间,避免开辟新内存。
3.使用ARGB_565减少内存占用,注意此时没有透明度。
4.META-INF禁止存放.apk、odex、so等敏感资源,该文件夹没有经过签名,容易被恶意替换。
5.秘钥禁止硬编码到代码中