时间:16周,每周4课时,每次两节课。
考核:雪梨教育(55%)+平时成绩(15%)+期末成绩(30%)
Android是Google公司和开放手机联盟领导及开发的基于Linux平台的、开源的智能操作系统。Android平台由操作系统、中间件、用户界面和应用软件组成。
目录
Android都是由以下四大组件组成的。Activity组件是重点。
-
Activity(活动):
一个Activity组件就是一个单独的屏幕,每一个都被实现为一个独立的类,并且会继承“Activity基类“,大多数应用程序都是由多个界面(Activity)组成的。 -
BroadcastReceiver(广播消息接收器):
让用户对一个外部事件做出响应。 -
Service(服务):
较长生命周期并且没有用户界面的程序。运行在后台。跟Activity是兄弟。 -
ContentProvider(内容提供者)
多应用之间数据共享,数据存放在数据库中,Android常用的数据库为(SQLite)
应用中,每个界面对应一个Activity,每个Activity由一个布局(XML)来决定如何显示。(user interface/UI)
UI是人机之间传递、交换信息的接口;它实现了信息的内部形式与用户可接受形式之间的转换 (人机交互接口)
– UI负责捕获用户动作,在程序中处理动作。
– UI负责显示数据给用户。
Android用户界面采用MVC(Model-View-Controller)框架来接收用户动作、显示UI界面及处理数据等工作。
控制器:处理用户的数据。
视图:显示用户界面,与用户交互。
模型:数据模型。
Android用户界面MVC模式
-
模型层
模型层负责对数据的操作、对网络服务等的操作。
在Android中,数据库/文件操作、ContentProvider、网络访问等等充当模型层。
模型层后续会逐步介绍,在此不再赘述。 -
控制器层
控制器负责接受用户动作请求(如按键动作或触摸屏动作等),调用指定模型处理用户请求(如读取数据库、发送网络请求等),响应用户结果(如返回视图界面等)。
在Android系统中,控制器的责任由Activity承担,意味着Activity负责接收用户请求、调用模型方法、响应用户界面等操作(Activity不应承担过多业务逻辑(应交给模型层))。 -
视图层
• 视图层主要负责用户界面(UI)的设计(页面布局XML文件等)。
• 在Android中使用XML布局文件实现视图层和模型层的分离。
Android界面开发过程:
- 分析Activity,编写布局
- 在Activity中建立相应对象,设置属性
- 在Activity中建立对象,设置相应监听器方法
- 设计逻辑
Android视图层简介:
视图层采用视图树(View Tree)模型:用户界面中的界面元素以树型结构组织在一起,整个视图界面为一个视图树模型。
视图树:由View控件或ViewGroup(视图组)构成。
Android视图层简介
View控件是界面的最基本的可视单元,是Android视图界面的基类。
例如:文本(TextView)、输入框(EditText)……
ViewGroup是由其它View或ViewGroup组成的显示单元,继承自View类。
ViewGroup功能:提供了一种布局方法,可以按照该布局定制视图的外观和顺序
例如:LinerLayout、FrameLayout……
右面的继承左面的所有属性与方法!!!
Android中创建用户视图界面基本流程:
确定视图界面所采用的布局方式(暂用LinearLayout)
为视图界面添加视图组件
Android中创建视图界面有3种方法:
使用可视化编辑方式,创建用户视图界面
最简单的布局方式,但不适合创建复杂布局
使用XML代码方式,创建用户视图界面
最常用的布局方式,但只能创建静态界面
使用findViewById( )方法得到对象
使用Java代码方式,动态创建用户视图界面
最灵活的布局方式,但复杂度较大
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);引用布局文件XML格式
Log.e("helloworld","日志内容");
快速导包 ALT + ENTER
获取布局文件中视图控件的对象,通过ID寻找
TextView tvText = findViewById(R.id.helloworld);
tvText.setText("hello android");
用纯java代码实现视图界面
context环境上下文,activity继承了context类,所以可以作为参数。
TextView tvCountent = new TextView(this);
tvCountent.setText("我是java代码创建的");
setContentView(tvCountent);//调用视图,出现东西
Android学习路线:
Android系统框架
应用程序层,应用程序框架层,核心类库层,内核层(从上到下)。
Linux内核层相关驱动, C语言
核心类库(Libaries)和运行时环境(Runtime), C\C++
应用程序框架(Application Framework), Java (重要)上面的类库用java封装
应用程序(Application), Java等
Surface Manager,支持显示子系统的访问,提供应用程序与2D、3D图像层的平滑连接
Media Framework,实现音视频的播放和录制功能
SQLite,轻量级的关系数据库引擎
OpenGL ES,基于3D图像加速
FreeType,位图与矢量字体渲染
WebKit,Web浏览器引擎
SGL,2D图像引擎
SSL,数据加密与安全传输的函数库
Libc,标准C运行库,Linux系统中底层应用程序开发接口
内核层是硬件驱动,Libraries是对内核层的封装,用c/c++实现,应用框架层用Java实现
Linux内核层
- 硬件和其他软件堆层之间的一个抽象隔离层
- 提供安全机制、内存管理、进程管理、网络协议堆栈和驱动程序等核心系统服务
- Driver是驱动程序的意思,与硬件底层最接近部分
核心类库和运行时环境层
- 由核心运行库和Android运行时环境构成函数库,主要提供一组基于C/C++的函数库
Surface Manager 提供应用程序的2D、3D图像层的平滑连接
Media Framework 实现音视频的播放和录制功能
SQLite 轻量级的关系数据库引擎(数据库引擎)
OpenGL ES 基于3D图像加速(ES是简化版本)
FreeType 位图与矢量字体渲染
WebKit Web浏览器引擎(手机浏览器引擎)
SGL 2D图像引擎
SSL 数据加密与安全传输的函数库
Libc 标准C运行库,Linux系统中底层应用程序开发接口
核心类库和运行时环境层
Android运行时环境:
- 核心库,提供Android系统特有函数功能和Java语言函数功能
- Dalvik虚拟机,实现基于Linux内核的线程管理和内存管理
- Android5.0开始,ART取代了Dalvik虚拟机
运行时环境指的是应用程序的环境。
左面由C/C++开发,右面由JAVA开发。
ART取代下面那个虚拟机,使得手机更快 ,Core Libraries是虚拟机。
应用程序框架层
提供Android平台基本的管理功能和组件重用机制:
- Activity Manager, 管理应用程序的生命周期
- Windows Manager, 启动应用程序的窗体
- Content Provider, 共享私有数据,实现跨进程的数据访问
- (内容提供者) 实现数据共享。
- Package Manager, 管理安装在Android系统内的应用程序
- Telephony Manager, 管理与拨打和接听电话的相关功能
- Resource Manager, 允许应用程序使用非代码资源
- Location Manager 管理与地图相关的服务功能
- Notification Manager 允许应用程序在状态栏中显示提示信息
应用程序层
提供一系列的核心应用程序
包括电子邮件客户端、浏览器、通讯录和日历等
Android的版本
Android系统的版本有很多,Google使用API级别来标识具体的Android版本,不需要记忆,理解就好。
Android程序采用应用程序的向后兼容性,使用旧接口的应用,能够运行在新的系统上。
Android系统版本与API等级对应关系表:
http://blog.csdn.net/s003603u/article/details/53318638
2007年Google发布Android操作系统的十几年时间中多次发布新的版本
2019年发布10.0
Android 10,主要增加的新特性比如说基于可折叠手机的多窗口的支持、对于5G网络的支持等
Gradle环境配置
是构建Android程序的工具,打包成APK(安卓程序安装包)
更新Jar包。修改Gradle配置文件就好了
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
Gradle个版本下载地址:
https://services.gradle.org/distributions/
Android Studio视图
1.Android视图:
列出一个工程的常用文件夹
Gradle文件单独列出,方便修改
推荐使用此视图
1.1 app —> java -->MainActivity
java源代码文件
1.2. app–> res
资源文件
1.2.1 app —> res–> drawable
图片
1.2.2 app —> res–> layout
XML格式,布局文件
1.2.3 app —> res–> mipmap
图片
1.2.4 app —> res–> values
值相关资源(颜色,字符串,格式)
2.Project视图:
以Project(项目文件)为根目录列出
跟本地文件列表是一样的,展示工程中所有的文件
一般的工程常用的是一个app模块
可看到工程中所有文件
text–app–src存放所有的java’源代码与资源文件
3.Packages视图:
以包为单位列出所有的源代码及资源
原res文件下的东西
用包的形式展示文件
MainActivity
-----------------------------
package com.example.text;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
MainActivity最终继承自Activity类
@Override 注解,表示此方法是重写的方法
打开文件自动调用此方法,程序的入口方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
R类有个静态属性成员,就是布局文件中的Layout(app--res--layout)
R。类型。名称 通过R类修改资源
日志输出功能,导入android.util.log
Log.e("标签","日志内容");
获取布局文件中的视图控件的ID,java中获取XML文件对象
TextView list=findViewById(R.id.name1);//int类型参数,必须先得到ID属性,通过R类访问对象
list.setText( "1213132132");
}
}
activity——main
<!--此页面是布局页面,负责呈现画面-->
<?xml version="1.0" encoding="utf-8"?>
<!--版本号 编码方式 第一行永远不动-->
<!--所有数据在的文件是布局文件-->
<!--下一行的ConstraintLayout是布局类型
xmlns 是命名空间 xml文件的name'space
-->
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!--上面那些都是元素属性 双引号里面的是属性的值
android:layout_width="match_parent"
在android命名空间中定义了layout属性
-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<!--清单文件 包含所有使用的组件-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.text">
<!-- application 对应应用程序 设置整个应用程序的属性 -->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Android应用程序的构成
eclispe AndroidStudio
workspace---------------project
project-----------------module
LogCat的使用
LogCat的右上方的五个字母表示五种不同类型的日志信息 ,他们的级别依次增高
[V]:详细(Verbose)信息
[D]:调试(Debug)信息
[I]:通告(Info)信息
[W]:警告(Warn)信息
[E] :错误(Error)信息
LogCat程序调试步骤
- 引入android.util.Log包
- 使用Log.v()、 Log.d()、 Log.i() 、Log.w() 和 Log.e()五个函数在程序中设置“日志点”
- 当程序运行到“日志点”时,应用程序的日志信息便被发送到LogCat中
判断“日志点”信息与预期的内容是否一致 - 进而判断程序是否存在错误
- Log.v()用来记录详细信息,Log.d()用来记录调试信息,Log.i()用来记录通告信息,Log.w()用来记录警告信息,Log.e()用来记录通错误信息