Android 基础知识分享

1.Android项目目录结构

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

推荐阅读更多精彩内容