课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
无论是进行java编程还是说基于android系统的软件开发我们都是有一套既定的编程规则和规范在作为技术指导。今天,我们就一起来了解一下,android软件编程开发的设计规范都有哪些。
Android基本组件部分
1,Activity#onSaveInstanceState()方法不是Activity生命周期方法,也不保证一定会被调用。它是用来在Activity被意外销毁时保存UI状态的,只能用于保存临时性数据,例如UI控件的属性等,不能跟数据持久化存储混为一谈。持久化存储应该在Activity#onPause()/onStop()中实行。
2,Activity间通过隐式Intent的跳转,在发出Intent之前必须通过resolveActivity检查,避免找不到合适的调用组件造成ActivityNotFoundException的异常。
3,避免使用隐式Intent广播敏感信息,信息可能被其他注册了对应BroadcastReceiver的App接。
说明:
通过Context#sendBroadcast()发送的隐式广播会被所有感兴趣的receiver接收,恶意应用注册监听该广播的receiver可能会获取到Intent中传递的敏感信息,并进行其他危险操作。如果发送的广播为使用Context#sendOrderedBroadcast()方法发送的有序广播,优先级较高的恶意receiver可能直接丢弃该广播,造成服务不可用,或者向广播结果塞入恶意数据。如果广播仅限于应用内,则可以使LocalBroadcastManager#sendBroadcast()实现,避免敏感信息外泄和Intent拦截的风险。
4,不要在Activity#onDestroy()内执行释放资源的工作,例如一些工作线程的销毁和停止,因为onDestroy()执行的时机可能较晚。可根据实际需要,在Activity#onPause()/onStop()中结合isFinishing()的判断来执行。
5,如非必须,避免使用嵌套的Fragment。
说明:
嵌套Fragment是在AndroidAPI17添加到SDK以及Support库中的功能,
Fragment嵌套使用会有一些坑,容易出现bug,比较常见的问题有如下几种:
1)onActivityResult()方法的处理错乱,内嵌的Fragment可能收不到该方法的回调,需要由宿主Fragment进行转发处理;
2)突变动画效果;
3)被继承的setRetainInstance(),导致在Fragment重建时多次触发不必要的逻辑。
非必须的场景尽可能避免使用嵌套Fragment,如需使用请注意上述问题。
6,对于只用于应用内的广播,优先使用LocalBroadcastManager来进行注册和发送,LocalBroadcastManager安全性更好,同时拥有更高的运行效率。
说明:
对于使用Context#sendBroadcast()等方法发送全局广播的代码进行提示。如果该广播仅用于应用内,则可以使用LocalBroadcastManager来避免广播泄漏以及广播被拦截等安全问题,同时相对全局广播本地广播的更高效。
7,当前Activity的onPause方法执行结束后才会执行下一个Activity的onCreate方法,所以在onPause方法中不适合做耗时较长的工作,这会影响到页面之间的跳转效率。
8,不要在Android的Application对象中缓存数据。基础组件之间的数据共享请使用Intent等机制,也可使用SharedPreferences等数据持久化机制。
9,使用Adapter的时候,如果你使用了ViewHolder做缓存,在getView()的方法中无论这项convertView的每个子控件是否需要设置属性(比如某个TextView设置的文本可能为null,某个按钮的背景色为透明,某控件的颜色为透明等),都需要为其显式设置属性(Textview的文本为空也需要设置setText(""),背景透明也需要设置),否则在滑动的过程中,因为adapteritem复用的原因,会出现内容的显示错乱。
10,Activity或者Fragment中动态注册BroadCastReceiver时,registerReceiver()和unregisterReceiver()要成对出现。
说明:
如果registerReceiver()和unregisterReceiver()不成对出现,则可能导致已经注册的
receiver没有在合适的时机注销,导致内存泄漏,占用内存空间,加重SystemService负担。
部分华为的机型会对receiver进行资源管控,单个应用注册过多receiver会触发管控模块抛出异常,应用直接崩溃。
Activity的生命周期不对应,可能出现多次onResume造成receiver注册多个,但终只注销一个,其余receiver产生内存泄漏。
以上就是阿里巴巴安卓编码规范中Android基本组件部分提及的一些规范,并没有全部列出来,只是记录一些个人觉得不错的地方,整体下来感觉都是细微的地方,感兴趣的同学可以自行查找完整版《阿里巴巴Android编码规范》阅读一下,里面还是有点干货的。
好了,本篇到此结束,希望对你有用。
作者:汪磊
来源:汪磊的博客
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。