临近年末,回顾总结2019,很多从事Android开发的朋友仍然遇到了很多困难,无法实现突破。
本文旨在通过以下知识点总结 希望能帮助上述陷入移动开发困境的朋友。
所以接下来本篇文章主要介绍 Android 开发中的部分知识点,本文节选自阿里巴巴开发手册,下载地址。文末还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资源 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习,通过阅读本篇文章,您将收获以下内容:
一、Java 语言规范
二、Android 资源文件命名与使用
三、Android 基本组件
四、UI 与布局
五、进程、线程与消息通信
六、文件与数据库
七、Bitmap、Drawable 与动画
八、安全
九、其他
一、Java 语言规范
遵循《阿里巴巴 Java 开发手册》手册,下载地址
二、Android 资源文件命名与使用
-
资源文件需带模块前缀。
-
layout 文件的命名方式。
Activity 的 layout 以 module_activity 开头
Fragment 的 layout 以 module_fragment 开头
Dialog 的 layout 以 module_dialog 开头
include 的 layout 以 module_include 开头
ListView 的行 layout 以 module_list_item 开头
RecyclerView 的 item layout 以 module_recycle_item 开头
GridView 的行 layout 以 module_grid_item 开头 -
drawable 资源名称以小写单词+下划线的方式命名,根据分辨率不同存放在不同的 drawable 目录下,建议只使用一套,例如 drawable-xhdpi。采用规则如下:模块名业务功能描述控件描述_控件状态限定词
如:module_login_btn_pressed,module_tabs_icon_home_normal -
anim 资源名称以小写单词+下划线的方式命名,采用以下规则:模块名逻辑名称[方向|序号]tween 动画资源 : 尽可能以通用的动画名称命名,如 module_fade_in ,module_fade_out , module_push_down_in (动画+方向);frame 动画资源:尽可能以模 块+功能命名+序号。如:module_loading_grey_001
-
color 资源使用#AARRGGBB 格式,写入 modul_colors.xml 文件中,命名格式采用以下规则:模块名逻辑名称颜色
如:#33b5e5e5 -
dimen 资源以小写单词+下划线方式命名,写入 module_dimens.xml 文件中,采用以下规则:模块名_描述信息
如:1dp -
style 资源采用小写单词+下划线方式命名,写入 module_styles.xml 文件中,采用以下规则:父 style 名称.当前 style 名称
如: -
string资源文件或者文本用到字符需要全部写入module_strings.xml文件中,字符串以小写单词+下划线的方式命名,采用以下规则:模块名_逻辑名称
如:moudule_login_tips,module_homepage_notice_desc -
Id 资源原则上以驼峰法命名,View 组件的资源 id 需要以 View 的缩写作为前缀。常用缩写表如下
其它控件的缩写推荐使用小写字母并用下划线进行分割,例如:
ProgressBar 对应的缩写为 progress_bar
DatePicker 对应的缩写为 date_picker
10.大分辨率图片(单维度超过 1000)大分辨率图片建议统一放在 xxhdpi 目录下管理,否则将导致占用内存成倍数增加。
说明:
为了支持多种屏幕尺寸和密度,Android 为多种屏幕提供不同的资源目录进行适配。
为不同屏幕密度提供不同的位图可绘制对象,可用于密度特定资源的配置限定符(在
下面详述) 包括 ldpi(低)、mdpi(中)、 hdpi(高)、xhdpi(超高)、xxhdpi (超
超高)和 xxxhdpi(超超超高)。例如,高密度屏幕的位图应使用 drawable-hdpi/。
根据当前的设备屏幕尺寸和密度,将会寻找最匹配的资源,如果将高分辨率图片放
入低密度目录,将会造成低端机加载过大图片资源,又可能造成 OOM,同时也是资
源浪费,没有必要在低端机使用大图。
正例:
将 144 * 144 的应用图标 PNG 文件放在 drawable-xxhdpi 目录
反例:
将 144 * 144 的应用图标 PNG 文件放在 drawable-mhdpi 目录
三、Android 基本组件
Android 基本组件指 Activity、Fragment、Service、BroadcastReceiver、
ContentProvider 等等。
-
Activity 间的数据通信,对于数据量比较大的,避免使用 Intent + Parcelable
的方式,可以考虑 EventBus 等替代方案,以免造成 TransactionTooLargeException。 -
Activity#onSaveInstanceState()方法不是 Activity 生命周期方法,也不保证
一定会被调用。它是用来在 Activity 被意外销毁时保存 UI 状态的,只能用于保存临
时性数据,例如 UI 控件的属性等,不能跟数据的持久化存储混为一谈。持久化存储
应该在 Activity#onPause()/onStop()中实行。 -
Activity 间通过隐式 Intent 的跳转,在发出 Intent 之前必须通过 resolveActivity
检查,避免找不到合适的调用组件,造成 ActivityNotFoundException 的异常。 -
避免在 Service#onStartCommand()/onBind()方法中执行耗时操作,如果确
实有需求,应改用 IntentService 或采用其他异步机制完成。 -
避免在 BroadcastReceiver#onReceive()中执行耗时操作,如果有耗时工作,
应该创建 IntentService 完成,而不应该在 BroadcastReceiver 内创建子线程去做。
说明:
由于该方法是在主线程执行,如果执行耗时操作会导致 UI 不流畅。可以使用
IntentService 、 创 建 HandlerThread 或者调用 Context#registerReceiver
(BroadcastReceiver, IntentFilter, String, Handler)方法等方式,在其他 Wroker 线程
执行 onReceive 方法。BroadcastReceiver#onReceive()方法耗时超过 10 秒钟,可
能会被系统杀死。 -
避免使用隐式 Intent 广播敏感信息,信息可能被其他注册了对应
BroadcastReceiver 的 App 接收。
说明:
通