Android基础笔记(一)

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

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系统的架构

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中不同的打包结构:

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 -> 部署到手机上

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 包括了 Url
intent.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会比较多。在不同分辨率下会有不同的效果,通常不推荐使用这个。

时间: 2024-12-27 22:33:06

Android基础笔记(一)的相关文章

Java for Android 基础笔记-数据类型

Java的基本数据类型 布尔类型 boolean true | false java是一个强类型的语言,与JS中的布尔类型的自由转换相比,JAVA的Boolean类型只有两种true和false,JS中相应的只可以自行转换. 字符类型 char 可以存储一个汉字,和其他语言非常类似不再赘述. 整型 byte, 占用一个字节 -128`-127 short 2字节 -2^15~2^15-1 int 4字节 -2^31~2^31-1 long 8字节  -2^63~2^63-1 整型常量默认为int

Android基础笔记(十七)- 多媒体编程

MediaPlayer播放音频的基本使用 音乐播放器的完善 视频播放SurfaceView 视频播放VideoView vitamio框架 如何调用照相机和录像机 MediaPlayer播放音频的基本使用 MediaPlayer播放音频的基本使用步骤: ①创建一个MediaPlayer实例 ②设置播放的数据格式 ③设置数据源 ④准备播放 ⑤开始播放 整体的示例代码很简单: // 1. 创建一个音频播放器实例 final MediaPlayer player = new MediaPlayer()

Android基础笔记(十八)- Fragment

博客的感悟终点-开始 什么是Fragment 添加fragment到Activity的两种方式 Fragment的生命周期 Fragment的向下兼容 Fragment之间的通信 博客的感悟,终点-开始 这个是基础的最后一篇博客了,学习了很多,也有很多感触. 就在这里大致总结一下. 坚持往往很难,完美的坚持下去更难.这是写这十八篇博客的感悟. 时间流失的很快,总是感觉时间不够用.慢慢的就会让自己博客的质量下降.今天反思了一下,我这样不就是在制造"破窗户"吗?(破窗户理论不知道的可以去看

Android基础笔记(三)

SQLite Android下数据库的创建 SQLiteDatabase简介 Android下数据库的第一种增删改查方式 Android下数据库的第二种增删改查方式 Android下数据库的事务 SQLite SQLite,是一款轻量级的数据库,是遵循ACID(原子性.一致性.隔离性.持久性)的关联式数据库管理系统,多用于嵌入式开发中. Android平台中嵌入了一个关系型数据库SQLite,和其他数据库不同的是SQLite存储数据时不区分类型. 例如一个字段声明为Integer类型,我们也可以

Android基础笔记(十一)- Service基础和注意事项以及Activity与Service的通信

Service的基本概念 为什么要有Service Service的基本用法 电话窃听器的小案例 Service和Activity通信 Service和Thread的关系 向光明而行! Service的基本概念 Service是Android的四大组件之一,在每一个应用程序中都扮演者非常重要的角色. 它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务.必要的时候,我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态. 既然都是被用于处理耗时的操作,那么我们什么

Android基础笔记(九)- 广播

广播的概念 案例-监听短信到来并解析短信内容 案例-拦截外拨电话并设置区号 案例-SD卡状态监听 介绍一些常用的广播 发送自定义广播 有序广播和无序广播 启程!!! 广播的概念 广播的种类: 无序广播(Normal broadcasts),类似于日常使用的WIFI,由一个广播者发出信号,可以有很多接收者同时接收,并且信号无法被中断和篡改: 有序广播(Ordered broadcasts),可以有最终的接收者,并存在信号接收的优先级: 定义广播接收者的步骤: ①定义一个类,继承BroadcastR

Android基础笔记(十五)- 图形、解决大图OOM、绘画工具的使用和练习

计算机图形表示的原理 加载大图出现OOM 缩放加载大的图片资源 创建一个原图的副本 图形处理的常用的API 傻瓜版美图秀秀 画画版 计算机图形表示的原理 首先要明确的一点是,一张图片的在内存中存储所需的大小和图片在屏幕设备上完整显示所需的内存大小是有非常大的差异的. 如下图,从中我们可以清晰的看出这张图片,在硬盘上所占的存储空间是303KB,也就是310272个字节.但是如果想把这样图片完整的展示到屏幕设备上,所需的内存空间远远不止这些. 有这样一个计算公式:图片展示所需内存 = 图片的宽度像素

Android基础笔记(十四)- 内容提供者读取联系人

利用内容提供者读取联系人 利用内容提供者插入联系人 内容观察者的原理 利用内容观察者监听系统应用数据库或者自己应用数据库的变化 利用内容提供者读取联系人 读取联系人相对于读取短信来说就复杂很多了,我们一步一步来吧. 先看看一下联系人的数据库,是位于什么地方! 既然很复杂,我们就一步步分析吧,我们把contacts2.db导出到电脑中,并使用SQLite数据库软件打开.你可以看到一大堆的表和视图,当然我们使用到的也只有三张.分别是raw_contacts.data.mimetypes分别存储着联系

Android基础笔记(十)- 帧动画、补间动画详解、对话框

帧动画 补间动画Tween Animation 对话框以及面试中的注意点 帧动画 帧动画很简单,我们首先看一下Google官方解释This is a traditional animation in the sense that it is created with a sequence of different images. 意思表达的很明了,一个传统的动画是由一组不同的图片组成的.帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果. 创建一帧动画分为一下几步(支持4