当前位置: 首页 > news >正文

关于安卓的一些残缺笔记

安卓笔记

    • Android应用项目的开发过程
    • Android的调试
    • Android项目文档结构
    • Intent的显式/隐式调用
    • Activity的生命周期
      • 1个Activity界面涉及到生命周期的情况
      • 2个Activity界面涉及到生命周期的情况
    • Android布局的理论讲解
      • Activity
      • 界面布局
    • ContentProvider是如何实现数据共享
    • Android整体架构及各层作用

Android应用项目的开发过程

开发Andriod的应用程序的一版过程

1.在Android Studio中生成Andriod应用项目框架

2.修改或编写Java源程序

3.修改或编写xml源程序

4.调用模拟器运行应用程序

Android应用程序架构分析

image-20221116201419881

逻辑控制层与表现层:在Android应用程序中,逻辑控制层与表现层是分开的设计的。逻辑控制层由Java应用程序实现,表现层由XML文档描述。

Android的调试

Android项目文档结构

Intent的显式/隐式调用

Activity的生命周期

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onDestory()
  • onRestart()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tOZU2RTu-1677903549075)(https://sunmingtypora.oss-cn-qingdao.aliyuncs.com/%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.png)]

1个Activity界面涉及到生命周期的情况

Activity的方法状态
onCreate创建Activity时调用
onStrart当Activity界面变成用户可见时调用
onResume当Activity界面获得焦点时调用(界面按钮可点击,文本框可输入)
onPause当Activity界面失去焦点(按钮不可)
onStop当Activity变为不可见时调用
onDestroy当Activity被销毁时调用
onRestart当Activity再次启动时调用

代码测试:

2个Activity界面涉及到生命周期的情况

Activity1Activity2
onCreate
onStart
onResume
在Activity1中调用Activity2
onPause
onCreate
onStart
onResume
onStop
在Activity2中返回
onPause
onStart
onResume
onStop
onDestory

代码测试:

Android布局的理论讲解

布局

  • Android界面设计被称为布局
  • Android中常见的布局包括:
    • 相对布局RelativeLayout
    • 线性布局LinearLayout
    • 表格布局TableLayout
    • 网格布局GridLayout
    • 帧布局FrameLayout

View

  • View在Android中可以理解为视图。它占据屏幕上的一块矩形区域,负责提供组件绘制和事件处理的方法。
  • View类是所有的widgets组件的基类。
  • View类位于android.view包中,View类的子类一般都位于android.widget包中。
  • 比如 android.view.View android.widget.TextView

ViewGroup

  • ViewGroup在Android中可以理解为容器。
  • ViewGroup类继承自View类,它是View类的扩展,是用来容纳其他组件的容器;
  • ViewGroup是一个抽象类,在实际应用中使用ViewGroup的子类来作为容器的
    • ViewGroup.MarginLayoutParams类
    • ViewGroup.LayoutParams类
image-20221120195215751 image-20221120195411034 image-20221120195428737 image-20221120195448438 image-20221120195504615

设计手机用户界面应解决的问题

  • 需要界面设计与程序逻辑完全分离,利于并行开发,在后期修改界面时,不用修改逻辑代码
  • 根据不同型号手机的屏幕解析度、尺寸和纵横比各不相同,自动调整界面上部分控件的位置和尺寸,避免因为屏幕信息的变化而出现显示错误
  • 能够合理利用较小的屏幕显示空间,构造出符合人机交互规律的用户界面,避免出现凌乱、拥挤的用户界面

Android用户界面框架

image-20221120200717284

Activity

  • Activity代表的是显示给用户的窗口或屏幕
  • Android中定义Activity使用一个view和viewgroup的树状节点
  • 要显示一个用户界面就需要给一个Activity分配一个View或者布局 ---- setContentView()方法

界面布局

  • 界面布局Layout是用户界面结构的描述,定义了界面中所有的元素、结构和相互关系

  • 声明Android程序的界面布局有两种方法

    • 使用XML文件描述界面布局
    • 在程序运行时动态添加或修改界面布局
  • 用户既可以独立使用任何一种声明界面布局的方式,也可以同时使用两种方式

  • 使用XML文件声明界面布局的特点

    • 将程序的表现层和控制层分离

    • 在后期修改用户界面时,无需更改程序的源代码

    • 用户还能够通过可视化工具直接看到所设计的用户界面,有利于加快界面设计的过程,并且为界面设计与开发带来极大的便利性

image-20221120201507634 image-20221120201613319

ContentProvider是如何实现数据共享

当一个应用程序要把自己的数据暴露给其他程序时,可以通过ContentProvider来实现。
其他应用可以通过ContenrResolver来操作ContentProvider暴露的数据。

如果应用程序A通过ContentProvider暴露自己的数据操作接口,那么不管A 是否启动,其他程序都可以通过该接口来操作A的内部数据,常有增、删、查、改。

ContentProvider是以Uri的形式对外提供数据,ContenrResolver是根据Uri来访问数据。

步骤:

  • 定义自己的ContentProvider类,该类需要继承Android系统提供的ContentProvider基类。
  • 在Manifest.xml 文件中注册ContentProvider,(四大组件的使用都需要在Manifest文件中注册) 注册时需要绑定一个URL。
    • 例如: android:authorities=“com.myit.providers.MyProvider”
    • 说明:authorities就相当于为该ContentProvider指定URL。 注册后,其他应用程序就可以通过该Uri来访问MyProvider所暴露的数据了。
  • 其他程序使用ContentResolver来操作。
    • 调用Activity的ContentResolver获取ContentResolver对象
    • 调用ContentResolver的insert(),delete(),update(),query()进行增删改查。

一般来说,ContentProvider是单例模式,也就是说,当多个应用程序通过ContentResolver来操作ContentProvider提供的数据时,ContentResolver调用的数据操作将会委托给同一个ContentResolver。

Android整体架构及各层作用

Android整体架构图,从上到下依次是 应用程序层(Application)、应用程序框架层(Application Framework)、系统运行库层(Libraries&Android RunTime)、Linux内核层(Linxu Kernel)
应用程序层:
平常大家所使用的Android应用程序都是在这一层上的。在这个层面开发的应用程序都是Java语言编写,调用 Application Framwork 提供的API来完成。
应用程序框架层:
这层为开发人员提供了可以完全访问核心应用程序所使用的API框架
系统运行库层——Libraries
程序库中是一些由C/C++编写的库组成,这些库能够被Android系统中的不同组件使用,他们通过应用程序框架为开发者提供服务
系统运行库层——Android Runtime
Android Runtime 分为 Core Libraries 和 Dalvik虚拟机。Core Libraries 提供了Java语言核心库的大部分功能,这里主要通过JNI(Java Nation Interface)的方式向应用程序框架层提供调用底层程序库(Libraries)的接口
Dalvik虚拟机是为了能够同时高效地运行多个VMs而实现的。每个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例
Linux内核层:
Android依赖于Linux2.6版内核提供的核心系统服务。内核作为一个抽象层,位于软件栈层和硬件层之间,Android对内核进行了增强

相关文章:

关于安卓的一些残缺笔记

安卓笔记Android应用项目的开发过程Android的调试Android项目文档结构Intent的显式/隐式调用Activity的生命周期1个Activity界面涉及到生命周期的情况2个Activity界面涉及到生命周期的情况Android布局的理论讲解Activity界面布局ContentProvider是如何实现数据共享Android整体架…...

MySQL 中的锁有哪些类型,MySQL 中加锁的原则

锁的类型MySQL 找那个根据加锁的范围,大致可以分成全局锁,表级锁和行级锁。全局锁全局锁,就是对整个数据库加锁。加锁flush tables with read lock解锁unlock tables全局锁会让整个库处于只读状态,之后所有的更新操作都会被阻塞&a…...

Winform中操作Sqlite数据增删改查、程序启动时执行创建表初始化操作

场景 Sqlite数据库 SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。 它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。 就像其他数据库,SQLite 引擎不…...

2023最新版本RabbitMQ下载安装教程

一、RabbitMQ简介 RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。主要用于在进程、应用程序和服务器之间交换数据,可以通过插件支持进行扩展,支持许多协议,并提供高性能、可靠性、集群和高可用队列。 AMQP :Advanced Me…...

如何使用码匠连接 Elasticsearch

目录 在码匠中集成 Elasticsearch 在码匠中使用 Elasticsearch 关于码匠 Elasticsearch 是一个开源的分布式搜索和分析引擎,常用于处理大规模数据集的搜索、实时数据分析和数据挖掘任务。它支持多种数据源,包括关系型数据库(如 MySQL、Pos…...

jmeter学习笔记二(jmeter函数与后置处理器)

Jmeter重要的函数 ${__counter(,)} 计数器 ​ ${__counter(TRUE,)} 默认加1; TRUE,每个用户有自己的计数器;FALSE,使用全局计数器 ​ 计数器元件,可以设置起始值,间隔值,最大值。运行结果超过最大值时&a…...

【独家】华为OD机试提供C语言题解 - 子序列长度

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明子序…...

Java之注解

注解1.1 注解的概念1.2 内置注解1.3 元注解1.4 自定义注解1.1 注解的概念 Annotation 是从JDK5.0 开始引入的新技术 Annotation的作用: 不是程序本身,可以对程序做出解释(这一点和注释comment没什么区别)可以被其他程序&#xff…...

【C++】string

【C修炼秘籍】string 目录 【C修炼秘籍】string 文章目录 前言 一、标准库里的string 二、string常用接口功能简介(具体使用和底层转到模拟实现) 1、string类的常见构造函数 2、string类对象的容量操作 3、string类对象的访问及遍历操作 4、 string类对象…...

JVM详解——执行引擎

如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:耶瞳空间 一:执行引擎介绍 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和…...

python学习——【第二弹】

前言 上一篇文章 python学习——【第一弹】给大家介绍了python中的基本数据类型等,这篇文章接着学习python中的运算符的相关内容。 运算符 python中的运算符主要有:算术运算符,赋值运算符,比较运算符,布尔运算符以及…...

242. 有效的字母异位词 349. 两个数组的交集

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意: 若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s “anagram”, t “nagaram” 输出: true 示例 2: 输入: s “rat…...

web网页设计——JavaScript一些语法

1、事件监听 语法&#xff1a; <1> 元素对象.addEventListener(‘事件类型’,要执行的函数&#xff09; 三要素&#xff1a;&#xff08;1&#xff09;、事件源 &#xff08;2&#xff09;事件类型 &#xff08;3&#xff09;执行的函数 <2>元素对象.on事件类型 …...

php宝塔搭建部署实战CSM会议室预约系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套基于fastadmin开发的CSM会议室预约系统的源码。感兴趣的朋友可以自行下载学习。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码&#xff0…...

嵌入式知识点-SPI通讯

该文原自 &#xff1a; 正点原子 01 SPI概述 SPI (Serial Peripheralinterface),顾名思义就是串行外围设备接口。SPI是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同…...

C#教程--01 简介

简介 C# 是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。 C#的特性 现代的、通用的编程语言。 面向对象。 面向组件。 容易学习。 结构化语言。 它产生高效率的程序。 它可以在多种计算机平台上编译。 .Net 框架的一部分。 C#强大的编程…...

【java基础】一篇文章彻底搞懂lambda表达式

文章目录lambda表达式是什么lambda表达式的语法函数式接口初次使用深入理解方法引用 :: 用法快速入门不同形式的::情况1 object::instanceMethod情况2 Class::instanceMethod情况3 Class::staticMethod对于 :: 的一些示例及其注意事项构造器引用变量作用域使用外部变量定义内部…...

通用SQL查询分析器

技术&#xff1a;Java、JSP等摘要&#xff1a;本文主要针对当前很多软件都无法实现跨数据库、跨平台来执行sql语句而用户又仅需做一些基本的增删改查操作的矛盾&#xff0c;设计了一个能够跨平台跨数据库的软件。此软件是一个通用SQL查询分析器&#xff0c;利用java语言本身的跨…...

机器学习100天(三十八):038 朴素贝斯-处理离散数据

《机器学习100天》完整目录:目录 机器学习100天,今天讲的是:朴素贝斯-处理离散数据! 打开 spyder,新建一个 naive_bayes_category.py 脚本。上一节我们引入了一批西瓜样本。并使用朴素贝叶斯公式计算出一个瓜蒂脱落、圆形、青色的西瓜是熟瓜的概率。下面我们来使用 pytho…...

【3.3】指针、二分、SSM项目

二分查找 class Solution {public int search(int[] nums, int target) {int n nums.length;int left 0;int right n - 1;while(left < right){int mid left (right - left) / 2;if(nums[mid] < target){left mid 1;}else if(nums[mid] > target){right mid …...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...

OpenGL-什么是软OpenGL/软渲染/软光栅?

‌软OpenGL&#xff08;Software OpenGL&#xff09;‌或者软渲染指完全通过CPU模拟实现的OpenGL渲染方式&#xff08;包括几何处理、光栅化、着色等&#xff09;&#xff0c;不依赖GPU硬件加速。这种模式通常性能较低&#xff0c;但兼容性极强&#xff0c;常用于不支持硬件加速…...