Andriod学习笔记(一)

写在前面的话

  • App开发的编程语言
    • Java和Kotlin
    • XML
  • App连接的数据库
  • App工程目录结构
    • 模块级别的编译配置文件
    • 清单文件
  • 界面显示与逻辑处理

安卓是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备。
Mininum SDK表示安卓该版本以上的设备都可以运行该Android代码。
Android采用Log工具打印日志:
Log.e:表示错误信息,比如可能导致程序崩溃的异常
Log.w:表示警告信息
Log.i:表示一般信息
Log.d:表示调试信息,可把程序运行时的变量值打印出来,方便跟踪调试
Log.v:表示冗余信息

App开发的编程语言

Java和Kotlin

Android的官方编程语言包括Java和Kotlin,如果想学好Kotlin必须要有良好的Java语言基础。Kotlin文件可以调Java文件,Java文件也可以调用Kotlin文件。
不管是Java还是Kotlin,它们都属于解释型语言,这类语言在运行之时才将程序翻译成机器语言,故而执行效率偏低。虽然现在手机配置越来越高,大多数场景的App运行都很流畅,但是涉及图像与音视频处理等复杂运算的场合,解释型语言的性能瓶颈便暴露出来。
编译型语言在首次编译时就将代码编译为机器语言,后续运行无须重新编译,直接使用之前的编译文件即可,因此执行效率比解释型语言高。
C/C++正是编译型语言的代表,它能够有效弥补解释型语言的性能缺憾,借助于Java Native Interface技术,Java代码允许调用C/C++编写的程序。事实上,Android的SDK开发包内部定义了许多JNI接口,包括图像读写在内的底层代码均由C/C++编写,再由外部通过封装好的Java方法调用。

XML

Android的布局文件使用XML来写,它是一种命令式的UI。
XML全称Extensible Markup Language,即可扩展性标记语言,严格来说,XML并非编程语言,只是一种标记语言。它类似于HTML,利用各种标签表示页面元素,以及各元素之间的层级关系及其排列组合。
每个XML标签都是独立的控件对象,标签内部的属性以“android:”打头,表示这是标准的安卓属性,各属性分别代表控件的某种规格。

App连接的数据库

Java编程是通过JDBC连接数据库进行增删改查,这个数据库可能是MySQL,也可能是Oracle,还可能是SQL Server。

问题1:企业数据库无法在手机上安装,那么App怎样管理业务方面的数据记录?
Android内置了专门的数据库名为SQLite,它遵循关系数据库的设计理念,SQL语法类似于MySQL。不同之处在于,SQLite无须单独安装,因为它内嵌到应用进程当中,所以App无需配置连接信息,即可直接对其增删改查。由于SQLite嵌入到应用程序,省去了配置数据库服务器的开销,因此它又被归类为嵌入式数据库。

问题2:SQLite的数据库文件保存在手机上,开发者拿不到用户的手机,又该如何获取App存储的业务数据?
手机端的App,连同程序代码及其内置的嵌入式数据库,其实是个又独立又完整的程序实体,它只负责手机上的用户交互与信息处理,该实体被称作客户端
而后端的Java Web服务,包括Web代码和数据库服务器,同样构成另一个独立运行的程序实体,它只负责后台的业务逻辑与数据库操作,该实体被称作服务端
客户端与服务端之间通过HTTP接口通信,每当客户端觉得需要把信息发给服务端,或者需要从服务端获取信息时,客户端便向服务端发起HTTP请求,服务端收到客户端的请求之后,根据规则完成数据处理,并将处理结果返回给客户端。这样客户端经由HTTP接口并借服务器之手,方能间接读写后端的数据库服务器。

App工程目录结构

在这里插入图片描述
App工程分为两个层次,第一个层次是项目,另一个层次是模块。
模块依赖于项目,每个项目至少有一个模块,也能拥有多个模块。
一般所言的“编译运行App”,指的是运行某个模块,而非运行某个项目,因为模块才对应实际的App。
在这里插入图片描述
App的工程目录结构有两个分类(左上角Android视图下),一个是app(代表app模块);另一个是Gradle Scripts。
app下的3个子目录:

  1. manifest:只有一个XML文件,即AndroidManifest.xml,是App的运行配置文件。
  2. java:第一个包存放当前模块的java源代码,后面两个包存放测试用的java代码
  3. res:存放当前模块的资源文件,包含四个子目录:
  • drawable目录存放图形描述文件与图片文件
  • layout目录存放app页面的布局文件
  • mipmap目录存放app的启动图标
  • values目录存放一些常量定义文件,如:字符串常量、像素常量、颜色常量和样式风格定义常量

注:矢量图放大后不会失真,位图会。

Gradle Scripts是工程的编译配置文件,主要有:

  • build.gradle:分为项目级和模块级,用于描述App工程的编译规则
  • proguard-rules.pro:描述Java代码的混淆规则,有利于提高安卓应用的安全性,相当于某种形式的加密
  • gradle.properties:用于配置编译工程的命令行参数(global级别的定义了网络代理的IP地址和端口号)
  • settings.gradle:配置了需要编译哪些模块,初始内容为include‘:app’,表示只编译app模块。
  • local.properties:本地配置文件,它在工程编译时自动生成,用于描述开发者电脑的环境配置,包括SDK的本地路径、NDK的本地路径等。

注:
Project级别就是工程级别的,全局的;Module级别就是模块级别的,局部的
例如:
项目级别的build.gradle指定了当前项目的总体编译规则
模块级别的build.gradle对应于具体模块,每个模块都有自己的build.gradle,它指定了当前模块的详细编译规则

模块级别的编译配置文件

plugins {id 'com.android.application'
}android {namespace 'com.example.experiment01'//指定编译用的SDK版本号,对应的有Android的版本号compileSdk 34defaultConfig {//指定该模块的应用编号,也就是app的包名,是应用的唯一身份标识//要和清单文件中manifest标签的package属性保持一致applicationId "com.example.experiment01"//指定App适合运行的最小SDK版本号,minSdk 26//指定目标设备的SDK版本号,表示APP最希望在哪个版本的Android上运行targetSdk 33//指定APP的应用版本号versionCode 1//指定APP的应用版本名称versionName "1.0"//单元测试testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled false//指定混淆规则的文件proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}
//指定APP编译的依赖信息
dependencies {//指定编译Android的高版本支持库,如AppCompatAcitivity必须指定编译appcompat库implementation 'androidx.appcompat:appcompat:1.6.1'implementation 'com.google.android.material:material:1.10.0'implementation 'androidx.constraintlayout:constraintlayout:2.1.4'//指定单元测试编译用的junit版本号testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.5'androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

注:Gradle工具的版本配置在gradle\wrapper\gradle-wrapper.properties,每个版本的Android Studio都有对应的Gradle版本,只有二者的版本正确对应,App工程才能正确编译。

清单文件

每个应用的根目录下都必须包含一个AndroidManifest.xml,并且文件名必须一模一样。
这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显示页面。
根节点manifest下面的application节点的属性说明如下:

  • android:allowBackup:是否允许应用备份,允许用户备份系统应用和第三方应用的apk安装包和应用数据,以便在刷机或数据丢失后恢复应用。
  • android:icon:手机屏幕上显示的图标
  • android:label:手机屏幕上显示的名称
  • android:roundIcon:App的圆角图标
  • android:supportsRtl:是否支持阿拉伯语/波斯语这种从右往左的文字排列顺序
  • android:theme:App的显示风格

application下面的activity节点(activity是包含可执行操作的界面),是活动页面的注册声明,只有在AndroidManifest.xml中正确配置了activity节点,才能在运行时访问对应的活动页面。
初始配置的MainActivity正是App的默认主页,它的节点内部还配置两种必备的过滤规则。

  • action节点设置的android.intent.action.MAIN表示该页面是app的入口页面,启动app时最先打开的页面
  • category节点设置的android.intent.category.LAUNCHER决定了在手机屏幕上显示图标,如果同时有两个activity节点内部都设置了android.intent.category.LAUNCHER,那么桌面就会显示两个app图标。
<activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>

界面显示与逻辑处理

利用XML标记描绘应用界面,使用Java代码书写程序逻辑
问题1:这种界面设计与逻辑处理分开的好处?
使用XML文件描述APP界面,可以很方便地在Android Studio上预览界面效果。
一个界面布局可以被多处代码复用,一个Java代码也可能适配多个界面布局。

注:xmlns也就是xml namespace,指明了该节点下哪些属性可用。

完整的页面创建过程包括三个步骤:

  1. 在layout目录下创建XML文件
  2. 创建与XML文件对应的Java代码
  3. 在AndroidManifest.xml中注册页面配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/156318.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Restclient-cpp库介绍和实际应用:爬取www.sohu.com

概述 Restclient-cpp是一个用C编写的简单而优雅的RESTful客户端库&#xff0c;它可以方便地发送HTTP请求和处理响应。它基于libcurl和jsoncpp&#xff0c;支持GET, POST, PUT, PATCH, DELETE, HEAD等方法&#xff0c;以及自定义HTTP头部&#xff0c;超时设置&#xff0c;代理服…

节日灯饰灯串灯出口欧洲CE认证检测

灯串&#xff08;灯带&#xff09;&#xff0c;这个产品的形状就象一根带子一样&#xff0c;再加上产品的主要原件就是LED&#xff0c;因此叫做灯串或者灯带。2022年&#xff0c;我国灯具及相关配件产品出口总额超过460亿美元。其中北美是最大的出口市场。其次是欧洲市场&#…

智能工厂MES系统,终端设备支持手机、PDA、工业平板、PC

一、开源项目简介 源计划智能工厂MES系统(开源版) 功能包括销售管理&#xff0c;仓库管理&#xff0c;生产管理&#xff0c;质量管理&#xff0c;设备管理&#xff0c;条码追溯&#xff0c;财务管理&#xff0c;系统集成&#xff0c;移动端APP。 二、开源协议 使用GPL-3.0开…

YOLOV7改进:最新开源移动端网络架构 RepViT | RepViTBlock即插即用,助力检测 | 清华 ICCV 2023

💡💡💡本文独家原创改进:轻量级 ViT 的高效架构选择,逐步增强标准轻量级 CNN(特别是 MobileNetV3)的移动友好性。 最终产生了一个新的纯轻量级 CNN 系列,即 RepViT RepViTBlock即插即用,助力检测 | 亲测在多个数据集能够实现涨点,并实现轻量化 收录: YOLOv7…

【Debian系统】:安装debian系统之后,很多命令找不到,需要添加sudo之后才能使用,以下解决方法

项目场景&#xff1a; 问题描述 解决方案&#xff1a; 1.临时解决方案 2.永久解决方案 1.首先打开编辑&#xff1a; 2.打开之后最后一行添加代码&#xff1a; 3.最后运行一遍 .bashrc 4.已经可以了&#xff0c;可以试试reboot&#xff0c;重启一下机子 一点一滴才能成长 …

Go语言入门心法(二): 结构体

一: Go语言中结构体认知 package mainimport "fmt"/*go语言中的结构体认知升维:*/ func main() {println(go语言中的结构体与c语言中的结构体类似;go语言中的结构体相当于java|python中类功能相当)type Book struct {title string // 标题author string // 作者…

UDP和TCP特点(部分)对比:

传输层的两个主要协议&#xff1a;TCP 和 UDP UDP和TCP特点&#xff08;部分&#xff09;对比&#xff1a; UDP&#xff1a;无连接&#xff0c; 不可靠传输&#xff0c; 面向数据报&#xff0c; 全双工。 TCP&#xff1a;有连接&#xff0c; 可靠传输&#xff0c; 面向字节流…

Android---java内存模型与线程

Java 内存模型翻译自 Java Memory Model&#xff0c;简称 JMM。它所描述的是多线程并发、CPU 缓存等方面的内容。 在每一个线程中&#xff0c;都会有一块内部的工作内存&#xff0c;这块内存保存了主内存共享数据的拷贝副本。但在 Java 线程中并不存在所谓的工作内存&#xff0…

C#实现OPC DA转OPC UA服务器

运行软件前提前安装好OPC运行组件&#xff1a; 为方便演示&#xff0c;提前准备好了一个DAServer服务器&#xff1a; 接下来开始配置&#xff1a; 该软件主要实现的功能如下&#xff1a; 配置过程也相对简单&#xff1a; 第一步&#xff1a; 编辑如下文件&#xff1a; 第二步…

YOLOv7改进策略:RIFormerBlock助力检测|CVPR2023 RIFormer:无需TokenMixer也能达成SOTA性能的极简ViT架构

💡💡💡本文属于原创独家改进: 稀疏重参数RIFormerBlock模型引入YOLOv7进行创新性 RIFormerBlock | 亲测在多个数据集实现涨点; 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOLOv7自研创新结合,轻松…

redis在linux系统的安装与使用

一、单机安装Redis。 1.安装redis依赖 在控制台输入 yum install -y gcc tcl2.上传安装包 下载好的安装包上传到/usr/local/src/ 上传方法&#xff1a; 1.确保你拥有Linux服务器的IP地址、用户名和密码。 2.在Windows上&#xff0c;打开命令提示符&#xff08;Command Promp…

大数据学习(7)-hive文件格式总结

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…

Flink---14、Flink SQL(SQL-Client准备、流处理中的表、时间属性、DDL)

星光下的赶路人star的个人主页 你生而真实&#xff0c;而非完美 文章目录 1、Flink SQL1.1 SQL-Client准备1.1.1 基于yarn-session模式1.1.2 常用配置 1.2 流处理中的表1.2.1 动态表和持续查询1.2.2 将流转换为动态表1.2.3 用SQL持续查询1.2.4 将动态表转换为流 1.3 时间属性1.…

PLC和工控机的网络特性

现场总线技术是工业自动化***深刻变革之一。PLC和工控机采用现场总线后可方便地作为I/O站和监控站连接在DCS系统中。现场总线是一种取代4&#xff5e;20mA标准&#xff0c;用于连接智能现场设备和控制设备的双向数字通讯技术&#xff0c;现场总线具有开放性和互操作性&#xff…

【重拾C语言】八、表单数据组织——结构体(类型、类型别名、直接/间接访问;典例:复数、成绩单)

目录 前言 八、结构体 8.1 结构体类型 8.2 结构体类型名 8.2.1 typedef关键字 8.2.1 结构体类型别名 8.3 结构体变量 8.3.1 使用结构体类型引用 8.3.2 使用结构体类型定义 8.3.3 使用typedef定义的结构体类型别名 8.4 访问结构体变量 8.4.1 直接成员选择表达式 8.…

leetcode 打家劫舍篇

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

yolov8 strongSORT多目标跟踪工具箱BOXMOT

1 引言 多目标跟踪MOT项目在Github中比较完整有&#xff1a;BOXMOT &#xff0c; 由mikel brostrom提供。在以前的版本中&#xff0c;有yolov5deepsort&#xff08;版本v3-v5&#xff09;&#xff0c; yolov8strongsort&#xff08;版本v6-v9&#xff09;&#xff0c;直至演变…

[Machine learning][Part4] 多维矩阵下的梯度下降线性预测模型的实现

目录 模型初始化信息&#xff1a; 模型实现&#xff1a; 多变量损失函数&#xff1a; 多变量梯度下降实现&#xff1a; 多变量梯度实现&#xff1a; 多变量梯度下降实现&#xff1a; 之前部分实现的梯度下降线性预测模型中的training example只有一个特征属性&#xff1a…

【k8s】ingress-nginx通过header路由到不同后端

K8S中ingress-nginx通过header路由到不同后端 背景 公司使用ingress-nginx作为网关的项目&#xff0c;需要在相同域名、uri&#xff0c;根据header将请求转发到不同的后端中在稳定发布的情况下&#xff0c;ingress-nginx是没有语法直接支持根据header做转发的。但是这个可以利…

Tmux教学【有图有代码】

Tmux教学【有图有代码】 0、前言1、Tmux基本概念1.1 安装 2、Tmux使用2.1 session操作2.2 window操作2.3 pane操作2.4 其他操作 3、日常中Tmux的工作流 0、前言 想必同学们在跑代码时也许会存在这样一个问题&#xff1a; 本地在连接远程服务器跑代码的时候&#xff0c;本地ssh窗…