美文网首页NJUPT 计软院 复习资料
NJUPT《 嵌入式应用终端开发 》

NJUPT《 嵌入式应用终端开发 》

作者: Du1in9 | 来源:发表于2021-03-01 09:33 被阅读0次

    课程要求

    1、上课考勤 6 次,课堂作业 3 次。
    2、上机实验 4 次:实验报告格式规范,内容充实。
    3、期末课程设计:程序 + 大作业。

    Ⅰ、Android 简介

    • 1.1 手机操作系统

    1、早期的手机内部是没有智能操作系统的,所有的软件都是由手机生产商在设计时所定制,因此基本没有扩展功能。
    2、后期的手机使用了专为移动设备开发的操作系统,使用者可以根据需要安装不同类型的软件。
    3、操作系统对于手机的硬件配置要求较高,硬件成本、操作系统成本使手机的售价明显高于不使用操作系统的手机。
    4、操作系统包括: Android、 iPhoneOS、Windows mobile、 Windows Phone7、 Symbian、黑莓、 Palmos、Linux

    • 1.2 Android 特征

    1、界面设计上,提供丰富的界面控件。
    加快了用户界面的开发速度,保证了程序界面的一致性。
    将界面设计与程序逻辑分离,使用XML文件对界面布局进行描述,有利于界面的修改和维护。
    2、提供轻量级的进程间通讯机制 Intent,实现了跨进程组件通信和系统级广播消息的发送。
    3、提供了Service作为无用户界面、长时间后台运行的组件。
    Service无需用户干预,可以长时间稳定的运行,可为应用程序提供特定的后台功能。
    4、支持高效快速的数据存储方式:Shared Preferences、文件存储、轻量级数据库 SQLite。
    5、提供了 Content Provider(通用的共享数据接口),实现了跨进程共享数据。
    可以无需了解数据源、路径的情况下,对共享数据进行查询、添加、删除、更新。
    6、支持位置服务和地图应用。
    可以通过SDK提供的API直接获取当前位置,追踪设备的移动路线,或设定敏感区域。
    可以将Google地图嵌入到应用程序中,实现地理信息可视化开发。
    7、支持Widget插件,开发桌面应用,实现常见的一些小工具,或在主屏上显示重要信息。
    8、Android NDK 支持使用本地代码(C或C++)开发应用程序的部分核心模块。

    • 1.3 Android 体系结构

    一、应用程序层
    提供一系列的核心应用程序,包括:电子邮件、客户端、浏览器、通讯录、日历等
    二、程序框架层
    提供平台基本的管理功能和组件重用机制
    Content Provider:共享私有数据,实现跨进程的数据访问
    Package Manager:管理安装在系统内的应用程序
    三、中间件层
    Android 运行时含核心库和 ART 虚拟机
    1、核心库:提供Android系统的特有函数功能和Java语言函数功能
    2、ART虚拟机:采用预编译技术,在安装应用程序时把程序代码转换成机器语言,启动、运行更快,耗电更少
    四、Linux 内核
    Linux 3.0内核,它是硬件和其他软件堆层之间的一个抽象隔离层
    提供安全机制、内存管理、进程管理、网络协议堆栈、驱动程序等

    • 1.4 MVC 概述

    一、MVC 模式
    MVC 模式译为 “模型-视图-控制器” ,是软件工程中的一种软件架构
    ”Model-View-Controller“ 模式将交互式应用程序分成3个组件
    ① 模型:业务逻辑层,包含核心功能和数据并实现核心业务逻辑
    ② 视图:表示层,向用户显示信息
    ③ 控制器:控制层,处理用户输入,并实现模型层跟视图层的协同工作
    二、MVC应用领域
    ① 具有灵活人- 机界面的交互式应用程序
    ② 针对不同的用户角色,提供不同的用户界面
    三、变更-传播机制
    ① 一个模型对应多个视图
    ② 维护数据的一致性
    1、M(Model)模型层
    com.sharpandroid.domain:实体模型层,存放在程序中调用到的实体类。
    com.sharpandroid.servier:业务模型层,存放在程序中调用到的业务逻辑。
    数据库、网络、业务计算的操作都在该层处理。
    2、V(View)显示层
    Android 很好地将显示层抽离,放入"res/"目录中以XML的形式体现。
    虽然对于控件属性可以通过Java代码修改,但还是推荐在XML中设置,遇到动态修改再用硬编码的方式。这样增加了程序的可读性,有利于软件后期的维护。
    main.xml、shownews.xmlao:布局文件。
    strings.xml:存放常量。
    drawable:存放使用的图片文件。
    3、C(Controller)控制层
    Control 是 Acticity 的天职,你只用告诉Acticity做什么,而至于怎么做那是模型层的事。
    所以不要在Acitivity中写代码,要通过 Activity 交割 Model 业务逻辑层处理。
    Android中Acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。

    • 1.5 Android 程序结构

    一、HelloAndroid程序的结构
    1、在建立程序的过程中,ADT会自动建立一些目录和文件;并且以工程名称HelloAndroid作为根目录,将所有自动生成的和非自动生成的文件都保存在这个根目录下。
    2、这些目录和文件有其固定的作用,有的允许修改,有的不能修改。
    二、子目录、库、工程文件
    5个子目录:src、gen、assets、bin、res
    1个库:android.jar
    3个工程文件:Androidmanifest.xml、project.properties、proguard.cfg
    1、 src 目录
    源代码目录,保存所有允许修改的 java 文件和用户自己添加的 java 文件。
    工程建立初期,ADT根据工程向导中的"Create Activity"选项,自动建立HelloAndroidActivity.java文件,该文件可以修改。


    为了显示图形界面,需要在 HelloAndroidActivity.java 中继承Activity类,并在 onCreate() 函数中声明需要显示的内容。
    代码第3、4行,引入 Activity 和 Bundle 两个重要的包,用于子类继承和信息传递
    代码第6行,声明 HelloAndroid 类继承于 Activity 类
    代码第8行,表明需要重写 onCreate() 函数
    代码第9行,onCreate() 会在 Activity 首次启动时被调用,当作程序的主入口函数
    代码第10行,调用父类的 onCreate() 函数,并将 Activity 的状态信息传递给父类
    代码第11行,XML语言描述的用户界面,保存在res/layout/main.xml资源文件中
    2、 assets 目录
    用来存放原始格式的文件(音频、视频等二进制格式文件),缺省为空目录。
    此目录的资源不能被 R.java 文件索引,因此只能以字节流的形式进行读取。
    3、 bin 目录
    保存了编译过程中所产生的文件,以及最终的 apk 文件。
    4、 res 目录
    a.子目录 drawable-hdpi、drawable-mdpi、drawable-ldpi 用来保存针对不同屏幕尺寸需要显示的图像大小。上述目录中自动引入了不同尺寸的图标文件 icon.png,系统会根据屏幕分辨率为程序加载。
    b.子目录 layout 用来保存与用户界面相关的布局文件(main.xml),使用XML语言描述。

    代码第6行,使用 TextView 控件(用来显示字符串文本)
    代码第9行,显示的字符串,@string/hello是资源引用(strings.xml 文件中name属性为hello的string元素)
    c.子目录 values 用来保存颜色、风格、主题、字符串等。
    目录自动生成了strings.xml文件,程序名称和界面显示都保存在这个文件中。

    代码第3行,表明显示的字符串应是”Hello World,HelloAndroidActivity!"
    5、gen 目录
    ① 用于保存ADT自动生成的 java 文件,例如 R.java、AIDL文件,这个目录中的文件不建议用户进行任何修改。
    R.java 包含对 drawable、layout、values 目录内资源的引用指针,程序能够直接通过R类引用目录中的资源。

    ② R类内部定义的子类,对应资源类型;如:drawable类对应图像资源类型,layout 类对应布局资源类型。
    子类内部定义的静态变量表示资源名称,对应资源的文件名(或XML文件的name属性);
    如:layout类的内部变量main对应src/layout/main.xml文件,string类的内部变量hello对应values/strings.xml文件中name属性为hello的资源。
    ③ 引用资源
    a.代码中引用,引用格式:R.资源类型.资源名称(或XML文件的name属性),如:R.layout.main
    b.资源中引用,引用格式:@包名称/资源类型/资源名称(或XML文件的name属性),如:@string/hello
    6、android.jar 库
    函数库文件,Android 系统所支持的 API 都包含在这个文件中。
    7、工程文件
    ① proguard.cfg:供 ProGuard 工具进行代码优化、代码混淆的配置文件。
    ② project.properties:记录工程的相关设置,如:编译目标、apk设置等。
    可以通过右键点击工程名称,选择 "Properties" 进行修改。
    ③ Androidmanifest.xml:程序声明文件,包含运行应用程序前所必须掌握的信息。
    如:应用名称、图标、包名称、模块组成、授权、SDK最低版本等。

    a)根元素 manifest 定义了4个属性
    xmlns:android 属性定义了 Android 的命名空间
    package 属性定义了应用程序的包名称
    b)元素 application 声明了4个子元素(重要)
    Activity、Service、BroadcastReceiver、ContentProvider
    c)元素 intent-filter 声明了2个子元素
    action、category,其作用是将 HelloAndroidActivity 作为默认的启动模块
    • 1.6 命令行创建 AVD

    1、使用 CMD 并进入<Android SDK>\tools 目录
    2、通过 android list targets 命令搜索有效的Android系统
    有2个可以选择的编译目标:4.0 Android系统(id为1)支持 Google API 的 4.0 Android系统(id为2)
    3、使用 android create avd -n android 4.0 -t 1 命令(-n 表明AVD的名称,-t 表明系统的id值)
    根据需要确定是否定制模拟器支持的硬件清单(Do you wish to create a custom hardware profile)

    • 1.7 命令行创建程序

    1、使用 CMD 并进入<Android SDK>\tools 目录
    2、使用 android list targets 命令搜索有效的Android系统
    3、使用 android create project -n HelloCommandline -k edu.hrbeu.HelloCommandline -a HelloCommandline -t 1 -p (目录) 命令建立工程目录和基本文件


    android.bat 可以建立和更新Android工程,还可以管理AVD。

    Ⅱ、Android 生命周期与组件通信

    • 2.1 Android 生命周期

    程序的生命周期指在Android系统中进程从启动到终止的所有阶段。



    1、前台进程
    前台进程是最重要的进程,是与用户交互的进程。包含以下4种情况:
    ① 进程中的Activity正在与用户进行交互。
    ② 进程服务被Activity调用,而且这个Activity正在与用户进行交互。
    ③ 进程服务正在执行声明周期中的回调函数,如 onCreate()、onStart()、onDestroy0。
    ④ 进程的 BroadcastReceiver 正在执行 onReceive() 函数。
    在多个前台进程同时运行时,可能出现资源不足的情况,此时会清除部分前台进程,保证用户界面能够及时响应。
    2、可见进程
    可见进程指部分界面能被用户看见,却不在前台与用户交互,不响应界面的进程。
    如果一个进程包含服务,且这个服务正在被用户可见的Activity调用,此进程同样被视为可见进程。
    一般只存在少量的可见进程,只有在特殊的情况下,才会清除可见进程保证前台进程的资源。
    3、服务进程
    服务进程指包含已启动服务的进程。没有用户界面,在后台长期运行。
    除非不能保证前台进程或可视进程所必要的资源,否则不强行清除服务进程。
    4、后台进程
    后台进程指不包含任何已启动的服务,而且没有任何用户可见的Activity的进程。
    一般存在数量较多的后台进程,在系统资源紧张时,将优先清除用户较长时间没有见到的后台进程。
    5、空进程
    空进程指不包含任何活跃组件的进程。
    空进程在系统资源紧张时会被首先清除。但为了提高应用程序的启动速度,会将空进程保存在系统内存用,在重新启动该程序时,空进程会被重新使用。

    • 2.2 Activity 组件

    一、Android 组件简介
    组件是可以调用的基本功能模块,应用程序就是由组件组成的。
    Android系统有四个重要的组件:Activity、Service、BroadcastReceiver、ContentProvider。
    1、Activity
    Activity是程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件。
    应用程序可以包含一个或多个Activity,在程序启动后会呈现一个Activity,用于提示正常启动。
    2、Service
    Service用于没有用户界面,但需要长时间在后台运行的应用。
    3、BroadcastReceiver
    BroadcastReceiver是用来接受并响应广播消息的组件。
    可以通过Activity或Notification通知用户收到重要信息。
    Notification能够通过多种方法提示用户,包括闪动背景灯、震动设备、发出声音等。
    4、ContentProvider
    ContentProvider是一种共享数据机制,应用程序通过它访问其他程序的私有数据。
    私有数据可以是存储在文件系统中的文件,也可以是SQLite中的数据库。
    二、Task 与 Activity栈
    1、一个Task是用户可以完成一个特定目标的一组Activity,与Activity属于哪个Application无关。例如,从联系人列表开始,选择一个邮箱地址,然后附加一个图片。联系人列表、邮箱、图片都存在于不同的Activity中,但却属于同一个Task。
    2、启动Task的Activity被称作根Activity。通常Task是从应用管理器、主屏(长按HOME键)开始的。用户可以通过点击根Activity的图标回到Task里去。使用BACK键可以回到这个Task的前一个Activity里,Activity栈可以由一个或多个Task组成。
    3、Task的一个重要的特性就是,用户可以中断当前任务,去进行另一个Task,又可以返回到这个Task。目的是为了用户可以同时运行多个任务,并且可以在这些任务间切换。
    4、当用户在Application中,从一个Activity跳到另一个时Activity,会保存用户访问的线性导航历史,这就是Activity栈。当用户按BACK键的时候,栈中的上一个Activity就会被展示出来。用户可以一直按BACK键,直到返回主屏Activity。


    三、Activity 基本状态
    Activity的四种基本状态:
    1、活动态(Active):Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互。
    2、暂停态(Paused):Activity界面上被部分遮挡,不再处于界面的最上层,且不能与用户进行交互。
    3、停止状态(Stopped):Activity在界面上完全不能被用户看到,也就是说被其他 Activity 全部遮挡。
    4、非活动态(Killed):又称为死亡态,是指不在上面三种状态之内的Activity状态。

    根据这几种状态,Activity栈遵循“后进先出”的规则。

    四、Activity 生命周期
    1、举例:建立一个新的Android工程
    工程名称:NewActivity
    包名称:edu.neu.androidlab
    Activity名称:NewActivity

    代码第8行,一个Activity就是一个Java类,而且必须继承自Activity基类。
    代码第13行,复写了基类的 onCreate() 方法。
    代码第14行,调用了父类的 onCreate() 方法。这在创建Activity时是必须的,类似于其它面向对象语言中的构造函数。
    代码第15行,采用setContentView() 方法设置布局文件。
    代码第16和17行,findViewByld() 方法功能是通过控件ID获得所需的控件对象。此方法返回控件基类View,通过强制类型转换成所需的控件对象。
    代码第18行和19行,完成相应控件显示文本的设置。

    2、AndroidManifest.xml文件中声明Activity的代码如下:

    代码第2行,属性android:name定义了Activity类的名称。
    代码第3行,属性android:label定义了Activity的标签名称。

    3、可以按照需要布局界面控件,如上面的Activity添加了一个按钮(Button)和一个文本框(TextView)。其声明代码如下所示:

    事件回调函数在生命周期中起重要作用,在这些函数中添加相应的代码可以实现相应的功能。

    1、完整生存期
    函数的调用顺序:onCreate() → onStart()→ onResume() → onPause()→ onStop()→ onDestroy()
    调用onCreate()函数分配资源
    调用onStart()将Activity显示在屏幕上
    调用onResume()获取屏幕焦点
    调用onPause()、onStop()、onDestroy(),释放资源并销毁进。
    2、可视生存期
    可视生存期是指从调用onStart()到调用onStop()之间的周期阶段。
    3、活动生存期
    活动生存期是指从调用onResume()到调用onPause()之间的周期阶段。
    • 2.3 Intent 意图

    一、Intent基本构成
    二、 Intent形式
    三、Intent Filter
    四、Activity信息传递
    五、获取Activity返回值

    相关文章

      网友评论

        本文标题:NJUPT《 嵌入式应用终端开发 》

        本文链接:https://www.haomeiwen.com/subject/rmsyfltx.html