Android资源文件命名与使用

1、layout的命名方式:(尽量带上模块名)

Activity的layout以module_activity开头
Fragment的layout以module_fragment开头
Dialog的layout以module_dialog开头
include的layout以module_include开头
ListView的item layout以module_list_item开头
RecyclerView的item layout以module_recycle_item开头
GridView的item layout以module_grid_item开头

2、资源文件的命名:

①drawable资源文件的命名:(以小写单词,下划线的方式命名),根据分辨率的不同,存放到不同的drawable的目录下,建议只使用一套,例如drawable-xhdpi.
模块名业务功能描述控件描述控件状态限定词
module_login_btn_pressed
②anim资源名称以小写单词+下划线的方式命名:模块名
逻辑名称[方向][序号]
module_fade_in module_fade_out
③color资源使用#AARRGGBB格式,模块名
逻辑名称_颜色
<color name="module_btn_bg_color">#33b5e5e5</color>
④id资源原则上用驼峰法命名,View组件的资源id需要以View的缩写作为前缀,LinearLayout(ll),RelativeLayout(rl),ConstraintLayout(cl),ListView(lv),ScrollView(sv),TextView(tv),Button(btn),ImageView(iv),CheckBox(cb),RadioButton(rb),EditText(et),ProgressBar(progress_bar),DatePicker(date_picker)
⑤大分辨率(单位度超过1000)的大分辨率图片建议统一放在xxhdpi目录下管理,否则将导致占用内存成倍数增加。

三、Android基本组件(Activity,Service,BroadcastReceiver,ContentProvider,Fragment)

①Activity中的onSaveInstanceState()方法不是Activity的生命周期,其在典型的Activity的生命周期的方法中是不会被调用的,但是当Activity意外销毁(切换屏幕的时候),调用onSaveInstanceState来保存UI的状态,只能用于保存临时数据。持久化存储应该在Activity的onPause/onStop()中来实行。
②Activity间通过隐式Intent的跳转,在发出Intent之前必须通过resolveActivity检查,避免找不到合适的调用组件,造成ActivityNotFoundException.
③避免在Service的onStartCommand()/onBind()方法中执行耗时的操作,可以改成在IntentService的handleIntent或者其他异步机制来完成。
④总是适用显示Intent启动或者绑定Service,且不要为服务生命Intent Filter,保证应用的安全性,如果确实使用隐式调用,则可为Service提供Intent Filter并从Intent中排除相应的组件名称,但是必须搭配使用Intent的setPackage()方法设置Intent的指定包名,这样可以充分消除目标服务的不确定性。
⑤当前Activity的onPause方法执行结束后才会执行下一个Activity的onCreate,所以在onPause方法中不适合做耗时较长的工作,这样会影响页面之间的跳转效率。
⑥Activity或者Fragment中动态注册BroadCastReceiver时,registerReceiver()和unregisterReceiver()要成对出现,如果不成对出现,则可能导致已经注册的receiver没有在合适的时机注销,导致内存泄漏,占用内存空间,加重SystemService负担。

四、UI与布局:(measure,layout,draw)

①布局中不得使用ViewGroup多重嵌套,尽量不要使用LinearLayout嵌套,应该改为RelativeLayout,可以有效降低嵌套数,保持扁平的View结构。
②在Activity中显示对话框或弹出浮层时,尽量使用DialogFragment,而非Dialog/AlertDialog,这样便于随Activity生命周期管理对话框/弹出浮层的生命周期。
③文本大小使用单位sp,view使用单位dp,对于TextView,如果在文字大小确定的情况下,推荐使用wrap_content布局避免出现文字显示不全的适配问题。
④不能在Activity没有完全显示PopupWindow和Dialog
⑤尽量不要使用AnimationDrawable,它在初始化的时候就将所有的图片加载到内存中,特备占内存,并且还不能释放,释放之后下次进入再次加载时会报错。
⑥不能使用ScrollView包裹ListView/GridView/ExpandableListView,因为这样会把ListView的所有的Item都加载到内存中,要消耗巨大的内存和cpu去绘制图面。

五、进程、线程与消息通信:

①新建线程的时候,必须通过线程池提供(AsybcTask或者ThreadPoolExecutor或者其他形式自定义的线程池),不允许在应用中自定义显示创建线程。(使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。如果不适用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者"过度切换"的问题,另外创建匿名线程不便于后续的资源使用分析,对性能分析造成困扰。
②子线程中不能更新界面,更新界面必须在主线程中进行,网络操作不能在主线程中调用。

六、文件与数据库
①任何时候不要硬编码文件路径,Android应用模块提供内部和外部存储,分别用于存放应用自身数据以及应用产生的用户数据。
②SharedPreference提交数据时,尽量使用Editor.apply(),而非Editor.commit。一般来讲,仅当需要确定提交结果,并据此有后续操作的时候,才使用Editor.commit。(SharedPreference相关修改使用apply方法进行提交会先写入内存,然后再异步写入磁盘,commit方法是直接写入磁盘,如果操作频繁的话,apply的性能会优于commit.

七、Bitmap、Drawable与动画

①加载大图片或者一次性加载多张图片的时候,应该在异步线程中进行(继承自AsyncTask,在doInBackground的方法中执行图片加载),因为图片的加载涉及到IO的操作,以及CPU的密集操作,很可能引起卡顿。
②使用完图片时,应该释放内存。(如:bitmap.recycle();)
③页面退出或者暂停的情况下,及时清理动画内存资源。(mImageView.clearAnimation())
④在动画或者其他异步任务结束时,应该考虑回调时刻的环境是否还支持业务处理,例如Activity的onStop()函数已经执行,且在该函数中主动释放了资源,此时回调如果不做判断就会产生空指针崩溃。
⑤尽量减少Bitmap(BitmapDrawable)的使用,尽量使用纯色(ColorDrawable),渐变色(GradientDrawable),StateSelector(StateListDrawable)等与Shape结合的形式构建绘图。

八、安全:

①使用PendingIntent时,禁止使用空Intent,同时禁止使用隐式Intent,因为使用了空Intent会导致恶意用户劫持修改Intent的内容。禁止使用一个空的Intent去构造PendingIntent,构造PendingIntent的Intent一定要设置ComponentName或者action.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,190评论 25 707
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,432评论 0 17
  • 我有些出离愤怒了,真的,不是我不爱这个企业,实在他不给我爱的理由。 来这个公司已经16年之久,我想以我固有的对于公...
    记搏阅读 244评论 0 2
  • 近时难得此清闲,自在从游自在眠。 伏枕无端思世事,便寻文曲上青天。 检点言辞多反调,非吾特立爱孤行。 只缘正气昭然...
    李汉仪阅读 238评论 0 5
  • 这是一个真实的故事,一只来自新西兰的羊儿告诉我的传奇经历…… 1 我终于成功的越狱了,哈哈哈哈!太兴奋了! 我...
    霞啊霞阅读 325评论 13 8