Android 基础知识分享

1.Android项目目录结构

Android 基础知识分享_第1张图片
android项目目录示意图.png
  • 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计算方式
    Android 基础知识分享_第2张图片
    dpi计算.png

    通常情况下,也是为了减轻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形式的作用
  • 权限申请与使用

你可能感兴趣的:(Android 基础知识分享)