• 1G - 5G的介绍
  • Android的操作系统的介绍
  • Android版本
  • Android系统的架构
  • 两种虚拟机的不同
  • ART模式
  • 模拟器的简介
  • SDK目录
  • Android工程目录结构
  • 打包的过程
  • ADB常用指令
  • 案例电话拨号器
  • 四种点击事件
  • Android的常用布局
  • Andriod中的单位

Android基础笔记(一)-快速入门_第1张图片

1G - 5G的介绍

1st - Generation
代表作是:大哥大,只能进行语音通信,不能够发短信、更不能上网。
2nd - Generation
代表作是:小灵通,可以收发短信、可以上网,但是速度几十Kps,而且不能在通话时使用。
3rd - Generation
速率一般在几百Kbps,并可以在通话的时候使用,保持在线,移动互联时代到来。
4th - Generation(LTE - Long Time Evolution - 长时间的进化)
速率达到100Kbps以上,可以在线观看高清视频,上传下载大批量数据。
5th - Generation
速度可达到1Gbps以上,几乎满足人们的所有需求。

它们之间最大的区别是:速率的不同

Android的操作系统的介绍

Android是由安迪-鲁宾开发的,一开始只是一个作为智能相机的系统,随着手机市场的扩大转向手机操作系统。

Android名称:安迪-鲁宾非常喜欢一款游戏里面的一个大瓢虫。

Android的Logo来源 :要求无性别、种族歧视,设计师在上厕所时看到厕所门上的标识,产生的灵感。

Android版本

几个比较稳定和重要的版本

版本 API 特性
2.3.3 10 增加NFC支付功能,近场感应功能
3.0 11 专为平板电脑和大屏幕设备优化
4.1.2 16

Android系统的架构

Android基础笔记(一)-快速入门_第2张图片

4层架构:
① Applications 原生的应用程序:浏览器、桌面、联系人等
② Application Framework 中间介,java代码调用底层c代码,提供各种管理器
③ Libraries(c代码库),Android Runtime(Dalvik VM、Libraries C)
④ 底层Linux(安全管理、内存管理、进程管理、电源管理、硬件驱动)

注意:Dalvik VM:虚拟机,android代码运行在此虚拟机

两种虚拟机的不同

为什么会有两种虚拟机?
Sun公司的版权问题
传统的JVM
编写 .java文件 ->编译为 .class文件 -> 打包成 .jar文件(将java源码编译为class文件,然后将一组class打包成jar)
基于 栈结构,栈存储于内存中,所以需要内存空间
Dalvik VM
编写 .java文件 -> 编译为 .class文件 -> 打包成 .dex文件 -> 打包成 .apk文件(将一组class编译为一个dex文件,然后有的平台为了更高的效率会将一个dex转换成odex文件,将N多个class文件编译为一个dex,这样执行效率会比较快,更适合在移动平台运行)
基于 寄存器的结构,寄存器在CPU中,所以用到CPU的空间。

请看下图,在JVM和DVM中不同的打包结构:
Android基础笔记(一)-快速入门_第3张图片

ART模式

 ART模式通过在安装应用程序时,自动对程序进行代码预读取编译,让程序直接编译成机器语言,免去了Dalvik模式要时时转换代码,实现高效率、省电、占用更低的系统内存、手机运行流畅。
 
 但凡事总有正反两面,ART在解决了该问题的同时,同时也有如:会占用略高一些的存储空间、安装程序时要相比普通Dalvik模式要长一些时间来实现预编译。
 
 ART模式是典型的以空间换时间的解决案例。

9 模拟器的简介

设备的常见分辨率

名称 分辨率 说明
VGA 480*640 标准的视频接口分辨率
QVGA 240*320 只有VGA的四分之一
HVGA 480*320 只有VGA的二分之一,使用的比较少了,开发使用
WVGA 480*800
FWVGAQ 480:854

Android开发常用的适配分辨率:
480 * 800
1280 * 800
VM Heap
虚拟机的内存,每一个应用程序所占内存
Snapshot
快照,类似win7的睡眠作用。关闭模拟器时,会保存当前模拟器的一些活动状态,数据,下次启动会加载这些信息,启动速度比较快。但是这个快照有bug,不推荐勾选。
CPU
arm、intel,如果下载intel的加速器才能选择
要使用intel加速器,需要安装加速器,并且下载相应镜像文件
Back camera
背部摄像头
Webcam
使用电脑的摄像头
VM Heap
DVM的默认大小,单位是M, 每一个应用程序所占内存
Internal Storage
手机内部存储大小
Use host GPU
用电脑的显卡处理器,显卡的cpu,电脑独立显卡,可以勾选,这样模拟器会快点。集成显卡会花屏
RAM
相当于电脑的内存条,断点数据丢失
ROM
只读存储器,相当于电脑的一块硬盘,断点数据不丢失

SDK目录

add-ons
存放高级应用的API的文件
build-tools
构建工具
docs
开发文档
extras
存放依赖的第三方的包
platforms
各个平台的文件
sources
API的源代码文件
system-images
系统的镜像文件
tools
工具文件

Android工程目录结构

src
源代码
gen
系统自动生成的文件
R.java中记录了项目中的各种资源,相当于一个字典
Android 4.2
当前工程所使用的SDK
assets
资产目录
不会在R文件中注册,原封不动的打包到APK中
bin
编译后的二进制文件
包括class、资源文件、dex、apk、清单文件等
libs
工程中所使用的库
res
系统资源,所有文件都会在R文件生成资源ID

① drawable:图片资源

  1. drawable-hdpi:高分辨率的图片目录
  2. drawable-ldpi:低分辨率的图片目录
  3. drawable-mdpi:中分辨率的图片目录
  4. drawable-xhdpi:大分辨率的图片目录
  5. drawable-xxhdpi:超大分辨率的图片目录
② layout:界面布局
③ menu:菜单
④ values:字符串、样式等数据
⑤ anim:动画文件
⑥ raw:原生文件

AndroidManifest.xml
① Android中的四大组件(Acticity、ContentProvider、BroadcaseReceiver、Service)都需要在该文件中注册
② 程序所需的权限也需要在此文件中声明

打包的过程

使用aapt(application android package tools)工具打包

编译 -> 打包 -> 签名 -> adb -> 部署到手机上

Android基础笔记(一)-快速入门_第4张图片

ADB常用指令

显示已连接的设备
adb devices
显示内容:设备名,状态(device、offline)
导入文件到手机
adb push <手机目标路径>
:把电脑上的文件推送到模拟器里
从手机导出文件
adb pull <手机源文件路径>
:把模拟器中的文件拉到电脑
安装程序
adb install

(案例)电话拨号器

// 3. 找到edit控件EditText et_number = (EditText) findViewById(R.id.et_number);// 4. 获取到电话号码String number = et_number.getText().toString().trim();if (TextUtils.isEmpty(number)) {    // 土司    Toast.makeText(MainActivity.this, "不能为空", Toast.LENGTH_LONG)            .show();    return;}// 5. 拨打电话 底层原理:socket通信Intent intent = new Intent(); // 创建一个意图:想干什么事intent.setAction(Intent.ACTION_CALL);// 6. 设置拨打电话的数据// Uri 包括了 Urlintent.setData(Uri.parse("tel:" + number)); // Uri:统一资源标识符,Url:统一资源定位符// 7.开启意图startActivity(intent);

16 四种点击事件

使用内部类实现OnClickListener接口来实现

private class MyButton implements OnClickListener {    @Override    public void onClick(View v) {        // 3. 找到edit控件        EditText et_number = (EditText) findViewById(R.id.et_number);        // 4. 获取到电话号码        String number = et_number.getText().toString().trim();        if (TextUtils.isEmpty(number)) {            // 土司            Toast.makeText(MainActivity.this, "不能为空", Toast.LENGTH_LONG)                    .show();            return;        }        // 5. 拨打电话 底层原理:socket通信        Intent intent = new Intent(); // 创建一个意图:想干什么事        intent.setAction(Intent.ACTION_CALL);        // 6. 设置拨打电话的数据        // Uri 包括了 Url        intent.setData(Uri.parse("tel:" + number)); // Uri:统一资源标识符,Url:统一资源定位符        // 7.开启意图        startActivity(intent);    }}

通过匿名内部类来实现

// 实现点击事件的第二种方式:匿名内部类btn_call.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {        callPhone();    }});

由类文件去实现监听接口

public class MainActivity extends Activity implements OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 1. 找到按钮        Button btn1 = (Button) findViewById(R.id.button1);        Button btn2 = (Button) findViewById(R.id.button2);        Button btn3 = (Button) findViewById(R.id.button3);        Button btn4 = (Button) findViewById(R.id.button4);        Button btn5 = (Button) findViewById(R.id.button5);        // 设置点击事件的第三种方式        btn1.setOnClickListener(this);        btn2.setOnClickListener(this);        btn3.setOnClickListener(this);        btn4.setOnClickListener(this);        btn5.setOnClickListener(this);    }    private void callPhone() {        // 3. 找到edit控件        EditText et_number = (EditText) findViewById(R.id.et_number);        // 4. 获取到电话号码        String number = et_number.getText().toString().trim();        // 5. 拨打电话 底层原理:socket通信        Intent intent = new Intent(); // 创建一个意图:想干什么事        intent.setAction(Intent.ACTION_CALL);        // 6. 设置拨打电话的数据        // Uri 包括了 Url        intent.setData(Uri.parse("tel:" + number)); // Uri:统一资源标识符,Url:统一资源定位符        // 7.开启意图        startActivity(intent);    }    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.button1:            callPhone();            break;        case R.id.button2:            break;        case R.id.button3:            break;        case R.id.button4:            break;        case R.id.button5:            break;        default:            break;        }    }}

在布局文件增加onclick属性,并在代码中添加对应的方法,并且传入View参数

在布局文件中注册点击事件

 <Button        android:onClick="click"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignLeft="@+id/et_number"        android:layout_below="@+id/et_number"        android:layout_marginTop="32dp"        android:text="拨打" />

在代码中增加对应的方法

// 按钮的第四种点击事件,原理:利用的反射技术// 第四种方式缺点:莫名其妙public void click(View v) {    callPhone();}

Android的常用布局

线性布局
水平、垂直显示,如果有多个组件,超出屏幕大小,超出部分就不显示
可以通过android:orientation来定义方向
android:orientation=“horizontal”表示水平方向
android:orientation=“vertical”表示垂直方向
相对布局
相对布局是实际布局中最常用的布局方式之一。
相对布局在xml文件中使用来定义。
相对布局可以设置某一个视图相对于其他视图的位置,这些位置可以包括上下左右等,因而相较于其他的布局方式而言具有很大的灵活性。
RelativeLayout的常用属性有以下一些:第一类:属性值为true或false  android:layout_centerHrizontal 水平居中  android:layout_centerVertical 垂直居中  android:layout_centerInparent 相对于父元素完全居中  android:layout_alignParentBottom 贴紧父元素的下边缘  android:layout_alignParentLeft 贴紧父元素的左边缘  android:layout_alignParentRight 贴紧父元素的右边缘  android:layout_alignParentTop 贴紧父元素的上边缘  第二类:属性值必须为id的引用名“@id/id-name”  android:layout_below 在某元素的下方  android:layout_above 在某元素的的上方  android:layout_toLeftOf 在某元素的左边  android:layout_toRightOf 在某元素的右边  android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐  android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐  android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐  android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐第三类:属性值为具体的像素值  android:layout_marginBottom 与父元素底部的距离或者外边距  android:layout_marginLeft 与父元素左边的距离或者外边距  android:layout_marginRight 与父元素右边的距离或者外边距  android:layout_marginTop 与父元素上部的距离或者外边距
表格布局
使用的较少
帧布局
框架布局是将控件组织在Android程序的用户界面中最简单的布局类型之一。
框架布局在xml文件中使用来定义。
框架布局中的子视图总是被绘制到相对于屏幕的左上角上,所有添加到这个布局中的视图都是以层叠的方式显示,第一个添加到框架布局中的视图显示在最底层,最后一个被放在最顶层,上一层的视图会覆盖下一层的视图,类似于html中的div。
在框架布局中,常用的属性有以下几项:  android:top    将视图放到屏幕的顶端  android:Buttom 将视图放到屏幕的低端  android:Left   将视图放到屏幕的左端  android:Right  将视图放到屏幕的右端  android:Center_vertical   将视图按照垂直方向居中显示  android:Center_horizontal 将视图按照水平方向居中显示

Andriod中的单位

dip
缩写:dp
一个基于density(密度)的抽象单位,这个和设备硬件有关,通常在开发中设置一些view的宽高推荐用这个,一般情况下,在不同分辨率,都不会有缩放的感觉。
在运行时, Android根据使用中的屏幕的实际密度, 透明地处理任何所需dip单位的缩放。
不依赖设备像素,依据设备自动适应大小,推荐使用
sp
同dip/dp相似,会根据用户的字体大小偏好来缩放,专门用于设置字体的大小
px
像素,是屏幕的物理像素点,与密度相关,密度大了,单位面积上的px会比较多。在不同分辨率下会有不同的效果,通常不推荐使用这个。

Android基础笔记(一)-快速入门_第5张图片

更多相关文章

  1. Android布局优化(一)LayoutInflate — 从布局加载原理说起
  2. 相对布局(RelativeLayout)
  3. Android 常用布局整理
  4. Android 文件系统及权限修改
  5. RelativeLayout布局用到的主要属性
  6. android 控件位置常用布局
  7. Android中对Log日志文件的分析
  8. 重新解压打包android 根文件系统 ramdisk.img
  9. Android界面布局——视图/容器易混淆点总结

随机推荐

  1. 如何选择正确的因变量(控制变量),让你的计
  2. 儿时环境对其人生长远影响的综述, 包括前
  3. 他们只有本硕学历, 却发过了AER, JPE, QJ
  4. 气候经济学能发Nature,Science的三大热点
  5. nature首次出现经济学编辑!想发nature的学
  6. 什么时候需要标准化回归模型中的变量?
  7. 对数vs线性vs二次vs指数形式,到底选择哪种
  8. 机器学习方法出现在AER, JPE, QJE等顶刊
  9. 万字长文述"家庭经济学"进展, 诺奖得主贝
  10. 过去三十年, RCT, DID, RDD, LE, ML, DSG