1.Android项目目录结构
module的含义
module相当于一个个独立的项目,可以起到解耦作用,app中可以引入多个module,单个module通常是为了实现一个独立的功能,如:扫码、图片处理等。assets、java、jniLibs、res个文件夹的含义
assets:内置静态资源,应用安装后无需任何特殊处理,代码可通过getResources().getAssets().open(String path)
打开文件;
java:应用代码;
jniLibs:涉及底层方法的一些.so库文件,比如视频的压缩与处理等方法;
res:应用资源文件,该目录下包含了图片资源文件夹、布局文件、菜单文件、图形资源、样式尺寸等文件。app/build.gradle文件
该文件是对应用一些基本的设置,如匹配系统版本、应用ID,应用版本、编译时使用的系统版本、build参数等信息;应用需要引入的库也需要在此设置,常见形式如下:
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.jscmcc.zhyq"
minSdkVersion 16
targetSdkVersion 19
versionCode 1
versionName "1.0"
multiDexEnabled true
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':CordovaLib')
compile 'org.apache.cordova:framework:6.2.3:release@aar'
compile 'com.android.support:design:26.1.0'
compile 'com.afap:utils:0.1.1@aar'
compile 'org.greenrobot:eventbus:3.0.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
}
2.Android中页面布局的适配
常用布局介绍:RelativeLayout、LinearLayout、GridLayout等
RelativeLayout:绝对布局,常用作view有堆叠的情形;
LinearLayout:线性布局,最常使用,该布局有权重属性;
GridLayout等:异性布局,另外还有table形式的布局,不过都不常用。
*补充一点:google提供了Flex布局,类似css的使用方式。各尺寸单位简介:dp、sp、px、 pt、mm、in
dp:相对尺寸,最常使用,通常不管实际物理像素大小,认为手机宽度为360dp;
sp:相对尺寸,用作设置文字的大小;
px:绝对像素,呈现在不同手机上的效果大不一样,不建议使用。自适应屏幕,相对布局的使用
1.尽量避免使用绝对值;
2.充分利用权重;
3.使用绝对布局时可以利用margin和padding,以及位于parent的位置。Fragment的作用与一般用法
3.Android常用组件:Activity、Service、Broadcast、Provider
Application
应用程序上下文对象,应用未被Kill期间,该实例一直存在,应用的初始化多在此进行,全局对象也在此实例化。Activity
应用可见窗口,最常用到的组件,View、操作等都在此进行,不过随着业务场景的增多,Activity会比较臃肿,android为此引入了fragment;Service
常用来执行后台任务,可自行设置启动、结束条件,可定时唤起(有限制),用于执行如后台文件上传、后台位置获取等;Broadcast
广播,通常用来监听手机设备的通用状态(如开机、网络变化、电量、是否充电灯),或者应用内约定的广播,起到传递消息的作用。最常用的就是监听系统广播,用来做自动启动、断网后暂停下载等;Provider
系统级别的数据共享,如访问联系人、短信等,不常用;Fragment
Android2.3中开始引入的一个概念,用来解耦应用,提高复用程度,同时提高各类设备的适配度,主要用来分割各个独立功能,可在Activity中进行多Fragment协同调度处理,如在pad上可一屏展示邮件列表和详情(左侧列表右侧详情),而手机由于屏幕大小限制通常都是列表和详情分开,利用Fragment实现列表和详情单独功能,由Activity调度处理,可实现快速复用开发。View的自定义
几乎所有可见的空间都是继承自View,如果有需求系统空间无法满足,可以自行继承View,实现其onDraw()(其他的方法一般不需要涉及)方法,如一些特效。ListView与RecycleView
ListView和RecycleView类似,主要用于大数据量的同类展示,通过设置Holder老优化性能,配合适配器,实现巨量数据的展示。
4.Android中图片相关要点
-
drawable-xhdpi(同mipmap-xhdpi)等含义与dpi计算方式
通常情况下,也是为了减轻UI工作量和apk包的体积,只需要提供一套图片,xxhdpi即可,另外在布局时需要注意采用相对布局,可以节省很多工作量。
应用会自动需要与自身设备匹配的图片文件,如果没有找到,会去其他dpi下面找。
-
drawable的自定义:shape、selector、layer-list
shape:绘制简单的图形,如圆形、椭圆、圆角矩形、渐变色、直线等规则图形,特点就是矢量,不会失真,体积很小,加载性能高;
selector:配置不同状态对应的不同图片,如配置一个按钮的背景时,可以设置常规背景、点击后背景、禁用时背景;(其他属性还有选中状态、触摸状态等)
layer-list:图片堆叠,多张图片进行堆叠实现效果,通过顺序的调整可实现想要的效果。
-
tint的使用
在API>=21时,可利用tint来实现多主题图片色的变换,如图片本身是黑色的,通过设置tint可实现着色处理。
*补充:vector可利用path构造复杂的矢量图形,官方提供了一套常用的图标
5.Android中网络请求
Network操作不能处于UI线程
历史演进:安卓4.0及以后禁止在UI主线程进行网络耗时操作,网络请求必须放到io线程;安卓7.0后貌似对smb和ftp等协议也禁止;常用异步操作AsyncTask、Handler、Thread、RxJava库
AsyncTask:官方提供的轻量级异步类
Thread+Handler:自行维护网路请求,以及请求完毕后通过handle处理后续逻辑;
RxJava:一个流式异步库,可以自由变换操作所处的线程。常见会话保持形式与处理
Android中并不会像浏览器一样自动保存和携带Cookie信息,所以通常的会话保持形式就是使用token,认证后的请求携带该值发送请求;如果服务端不支持,也可以人工改造使之能够适应cookie形式的项目,通常是采用拦截器自定拦截、保存、携带cookie信息。Http、Https的不同处理方式
其他如SMB、FTP等协议
6.Android中常见的持久化本地存储
SharedPreferences
小数据量的存储,通常用来存放一些系统个性化设置,其实质是一个xml文件,存在于应用沙盒中;Database
大数据量存储,支持常见的sql,手机中的数据库其实是一个.db文件,root的情况下可直接拷贝出使用sqlite工具打开;File
常见存储方式,特点是数据格式自由,保存路径自由,可用来存储诸如缓存图片、临时文件等。
7.混合式开发的应用
自定义xml格式,并原生解析为自绘View
由于View可自行绘制,如果需要应用具备原生体验效果,可采用此模式,不过前期约定解析和绘制工作量会很大且不移维护。使用WebView进行混合调用,JS Bridge
最常用的方式,也是最标准的方式,通过JS Bridge可实现html与Native的相互调用。
8.其他注意点
- 国际化与string.xml作用
- xxx-V21形式的作用
- 权限申请与使用