阿里android规范
阿里安卓开发规范,2017版,。。。。。。。。。。。。。。利言车同轨,书文,阿里巴巴Ando开发于m》既是高效合作的基础,也是深度新的开始。—淘宝技术负麦人庄卓然《阿里巴巴 Android开发手册》是阿里巴巴集团各大 Android开发团队的集体智慧结晶和经验总结,将淘宝、天猫、闲鱼、钉钉等App长期开发迭代和优化经验系统地整理成册以指导 Android开发者更加高效、高质量地进行App开发呈现给用户体验好、性能优、稳定性佳、安全性高的产品。《阿里巴巴 Android开发手册》作为阿里巴巴开发规约重要的一环我们的目标是●防患未然,提升质量意识,降低故障率和维护成本;标准统一,提升协作效率追求卓越的工匠精神,打磨精品代码。本手册以开发者为中心视角分为Java语言规蒞遵循《阿里巴巴Java开发手册》)Android资源文件命名与使用, Android基本组件,U与布局,进程、线程与消息通信,文件与数据库, Bitmap、 Drawable与动画,安全,其他等九大部分,根据约束力强弱规约依次分为强制、推荐、参考三大类:●【强制】必须遵守,违反本约定或将会引起严重的后果;●【推荐】尽量遵守,长期遵守有助于系统稳定性和合作效率的提升●【参考】充分理解,技术意识的引导,是个人学习、团队沟通、项目合作的方向对于规约条目的延伸信息中,“说明”对內容做了适当扩展和解释;“正例”提倡什么样的编码和实现方式;“反例”说明需要提防的雷区,以及错误案例。另外,「阿里巴巴 Android开发规范」认证考试同步上线,详情请访问https:/edu.aliyun.com/certification/cldt04《阿里巴巴 Android开发手册》项目组成员,排名不分先后:芸墨(淘宝技术部)矢亮(智能场景事业部)、游僧(淘宝技术部)、景宝(淘宝技术部)、邻云(闲鱼技术部)、尚节(猫客技术部)等,还有很多阿里巴巴移动开发工程师参与,在此一并表下感谢,感谢孤尽(《阿里巴巴Java开发手册》主要作者)对手册的指导。阿里巴巴 Android开发手册Java语言规范遵循《阿里巴巴Java开发手册》手册下载地址:https:/ygaliyun.com/articles/69327二、 Android资源文件命名与使用二、 Android资源文件命名与使用推荐】资源文件需带模块前缀。2.【推荐】 layout文件的命名方式。Activity的 layout以 module_ activity开头Fragment的 layout以 module fragment开头Dialog的 layout以 module dialog开头的 layout以 module include开头Listview的行 layout以 module list item开头RecyclerView的 em layout以 module recycle_item开头VeW的行 layout以 module grid item开头3.【推荐】 drawable资源名称以小写单词+下划线的方式命名,根据分辨率不同存放在不同的 drawable目录下,建议只使用一套,例如 drawable- hdpe。采用规则如下模块名业务功能描述控件描述控件状态限定词bA: module login btn pressed, module tabs icon home normal4.【推荐】anm资源名称以小写单词+下划线的方式命名,采用以下规则:模块名_逻辑名称_D向|号tween动画资源:尽可能以通用的动画名称命名,如 module fade_inmodule fade_out, module_ push down in(动画+方向)frame动画资源:尽可能以模块+功能命名+序号。如: module_ loading grey0015.【推荐】 color瓷源使用# AARRGGBB格式,写入 module_ colors xn文件中,命名格式采用以下规则模块名_逻辑名称_颜色如1 dp7.【推荐)stye资源采用小写单词+下划线方式命名写入 module styles.xm文件中,采用以下规则:父stye名称当前sye名称如8.【推荐 Istring资源文件或者文本用到字符需要全部写入 module strings. xm文件中,字符串以小写单词+下划线的方式命名,采用以下规则模块名逻辑名称sA: moudule login tips, module homepage_ notice_desc9.【推荐】ld资源原则上以驼峰法命名,iew组件的资源i需要以ew的缩写作为前缀。常用缩写表如下:控件缩写LinearlayoutRelativelayoutConstraint layoutCListviewScollⅤiewTextviewButtonbtImageⅤicwCheckboxchRadioButtonrEditTextet二、 Android资源文件命名与使用其它控件的缩写推荐使用小写字母并用下划线进行分割,例如ProgressBar对应的缩写为 progress_barDate Picker对应的缩写为 date picker0.【推荐】大分辨率图片(单维度超过1000)大分辨率图片建议统放在 XXhdpi目录下管理,否则将导致占用内存成倍数增加。说明为了支持多种屏幕尺寸和密度 Android为多种屏幕提供不同的资源目录进行适配。为不同屏幕密度提供不同的位图可绘制对象,可用于密度特定资源的配置限定符(在下面详述)包括ldpi(低)mdpi(中)hdpi(高) hdpe(超高)ⅹ hdpe(超超高)和ⅹ xxhdpi(超超超高)例如,高密度屏幕的位图应使用 drawable-hdpi根据当前的设备屏幕尺寸和密度,将会寻找最匹配的资源,如果将高分辨率图片放入低密度目录,将会造成低端机加载过大图片资源,又可能造成OOM,同时也是资源浪费,没有必要在低端机使用大图。正例将144*144的应用图标PNG文件放在 drawable-hdp目录反将144*144的应用图标PNG文件放在 drawable-mhdp目录扩展参考https:/developer.androidcom/guide/practices/screenssupporthtmi?hl=zh-Cn阿里巴巴 Android开发手册Android基本组件Android基本组件指 Activity、 Fragment、 Service、 BroadcastReceiver、ContentProvider等等1.【强制】 Activity间的数据通信,对于数据量比较大的,避免使用 Intent+ Parcelable的方式可以考虑 EventBus等替代方案以免造成 Transaction TooLargeEXception。2.【推荐】 Activity# on Savelnstance state()方法不是 Activity生命周期方法,也不保证定会被调用。它是用来在 Activity被意外销毁时保存∪状态的,只能用于保存临时性数据,例如ωl控件的属性等,不能跟数据的持久化存储混为一谈。持久化存储应该在 Activity# on Pause( noNstop)中实行。3.【强制】Actⅳiy间通过隐式 Intent的跳转在发出 Intent之前必须通过 resolveActivity检查,避免找不到合适的调用组件,造成 ActivityNotFoundException的异常。正例public void viewUrl( String url, String mime Type)Intent intent new Intent(Intent. ACTION VIEW)ntent.setDataAndType Uri. parse(url), mime Type)if getPackageManager( resolveActivity(intent, PackageManager MATCH DEFAULTONLY)l= nulltry tstartActivity(intent);3 catch(Activity Exception e)tif(Config. LOGD)iLog d(LOGTAG, "activity not found for mime Type +"over"+Uri. parse(url). getScheme(, e);Android基本组件反例Intentintent new Intent()ntent. setAction(com. great activity_ intent. Intent Demo1 Result3")4.[强制】避免在 Service# on Startcommand( lon Bind()方法中执行耗时操作,如果确实有需求,应改用 Intentservice或采用其他异步机制完成。正例:public class MainActivity extends Activity i@Overridepublic void on Create (Bundle savedInstanceState)isuper on Create(savedInstance State)setContent View (R layout. main)public void startlntentservice(View source)iIntent intent new Intent(this, Mylntentservice. class );startservice(intent)public class MyIntentservice extends IntentService Ipublic MyIntentService( isuper("MylntentService");@Overrideprotected void onHandleIntent(Intent intent)synchronized(this)3 catch(Exception e)i阿里巴巴 Android开发手册5.【强制】避兔在 BroadcastReceiverton receive()中执行耗时操作如果有耗时工作应该创建 Intentservice完成,而不应该在 BroadcastReceiver内创建子线程去做说明:由于该方法是在主线程执行,如果执行耗时操作会导致ω丨不流畅。可以使用ntentservice、创建 Handler Thread或者调用 Context# registerReceiver( BroadcastReceiver, ntentFilter, String, Handler)方法等方式,在其他 Broker线程执行 on Receⅳve方法。 BroadcastReceiver# on Receive(方法耗时超过10秒钟,可能会被系统杀死。正例IntentFilter filter new IntentFilter0filter. addAction (LOGIN SUCCESS)this registerReceiver(mBroadcastReceiver, filtermBroadcastReceiver new BroadcastReceiveroi@Overridepublic void onReceive(Context context, Intent intent)Itent userHomeIntent= new Intent(userHomeIntent setClass(this, UseHomeActivity classthis startActivity(userHomeIntent反例:mBroadcastReceiver= new BroadcastReceivero t@Overridepublic void on Receive(Context context, Intent intent)My DatabaseHelper my DB= new MyDatabaseHelper(context);
暂无评论