Android基础知识整理一

1. Android基础知识(第一行代码-第2版)

1.1 Android开发特色
1.1.1 系统架构
Linux内核层,系统运行库层,应用框架层,应用层
1.1.2 四大组件
活动Activity,服务Service,广播接收器Broadcast Receiver,内容提供器Content Provider
应用所看到的在活动中;服务一直运行,关闭应用也一直运行;广播接收信息如电话,短信(通知);内容提供器在应用程序之间共享数据
1.1.3 数据库
SQLite轻量级数据库,支持标准sql语法,也支持封装的api进行操作
1.2 Android项目文件结构
app壳项目内,AndroidManifest.xml所有的四大组件在这里声明,以及权限声明;
res放资源,图片,字符串,布局等。
1.2.1 AndroidManifest.xml
   <applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.JavaTestWithLeetcode"tools:targetApi="31" ><!-- 定义主Activity --><activity android:name=".ui.MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>

主Activity:应用一打开启动的活动就是这个activity

Android程序设计讲究逻辑和视图分离,在布局文件中编写界面,在活动中引用:setContentView()在活动中引入布局

1.2.2 build.gradle

有两层,一个是最外层(module:project) 一个app目录(module:app)

1.2.2.1 module:project
apply from: "config.gradle"
buildscript {repositories {google()mavenCentral()maven {url "http://maven.aliyun.com/nexus/content/groups/public/"allowInsecureProtocol = true}}dependencies {classpath "com.android.tools.build:gradle:7.1.3"classpath 'com.google.dagger:hilt-android-gradle-plugin:2.41'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}

注:不要将应用程序依赖项放在此处;他们属于在单个模块 build.gradle 文件中

  • buildscript块中的repositories用于构建脚本的依赖项,比如 Gradle 插件。

  • 项目级的repositories用于项目实际依赖项的解析。

  • 添加*maven仓库是为了使构建过程能够从指定地址中获取所需的依赖项,不是为了适配maven构建版本。

1.2.2.2 module:app
plugins {alias(libs.plugins.android.application)
}android {namespace 'com.example.javatestwithleetcode'compileSdk 34defaultConfig {applicationId "com.example.javatestwithleetcode"minSdk 24targetSdk 34versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}dependencies {implementation libs.appcompatimplementation libs.materialtestImplementation libs.junitandroidTestImplementation libs.ext.junitandroidTestImplementation libs.espresso.coreimplementation 'com.google.android.material:material:1.7.0'
}
1.3 第一个Android项目

随机选择器

设计主要目的是对添加的选项进行随机选择,核心逻辑简单,即在数组中random一个下标,随机取那个下标的数组数;设计这个小需求主要是了解安卓的开发流程以及一些布局中的例如flowlayout和button等样式的深入理解。

1.整体先在layout中设计布局,在MainActivity中需要引用这个布局,setContentView(),注意:MainActivity需要在AndroidManifest.xml中注册
2.button需要使用android.widget.Button 否则背景颜色等会被影响
3.flowlayout流式布局,相当于整体和item
4.可以封装ToastUtil和LogUtil封装成工具类后直接使用
5.活动的生命周期,oncreate-->finish
    private void addDataToFlowLayout(ArrayList<String> dataList) {if(dataList.isEmpty()){return;}flowLayout.removeAllViews();LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);layoutParams.setMargins(0, 0, getResources().getDimensionPixelSize(R.dimen.margin_100), 0);LayoutInflater inflater = LayoutInflater.from(this);for (String data : dataList) {View view = inflater.inflate(R.layout.item_flowlayout, flowLayout, false);TextView textView = view.findViewById(R.id.textView);textView.setText(data);textView.setPadding(getResources().getDimensionPixelSize(R.dimen.margin_40), getResources().getDimensionPixelSize(R.dimen.margin_40), getResources().getDimensionPixelSize(R.dimen.margin_40), getResources().getDimensionPixelSize(R.dimen.margin_40));textView.setSingleLine();textView.setTextColor(getResources().getColor(R.color.white));textView.setLayoutParams(layoutParams);textView.setOnClickListener(v->{ToastUtils.showToast(textView.getText().toString());});flowLayout.addView(view,layoutParams);}}
1.3.1 Intent

Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行 的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广 播等场景

1.Intent(Context packageContext, Class<?>
cls) 这个构造函数接收两个参数,第一个参数Context 要求提供一个启动活动的上下文,第二个参数Class 则是指定想要启动的目标活动
然后startActivity(intent)----显式intent
2.在AndroidManifest.xml的<activity>标签下面添加<intent-filter>内容,指定action和category,指明了这个activity可以响应的activity,category是附加信息,只有这两个同时匹配上才能响应Intent;每个Intent只能指定一个action但是多个category---隐式intent

隐式intent不仅可以启动自己程序内活动,还可以启动其他程序活动---->多个应用程序之间功能共享

button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});

如果有多个可选择的响应会跳出选择;可以通过schema指定当前活动能够响应的intent的协议

1.1.3.1 intent传递数据
//1.传递数据给下一个活动
intent.putExtra("extra_data",data);//键值对形式存放数据
Intent intent=getIntent();
String data =data.getStringExtra("extra_data");//取数据
//2.返回数据给上一个活动
button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(FirstActivity.this,                SecondActivity.class);startActivityForResult(intent, 1);//启动方式改变,请求码是唯一值,此处为1
}
});button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.putExtra("data_return", "Hello FirstActivity");setResult(RESULT_OK, intent);finish();//这里是SecondActivity,把返回值以键值对的形式放进去,然后给intent setResult,finish作用和back键一样
}
});
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();//如果SecondActivity是通过back按钮返回的,重写onBackPressed()
}@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnedData);//---活动被销毁后,回调上一个活动的onActivityResult()方法,通过重写这个方法获得返回的数据,这里是FirstAcitivity
}
break;
default:
}
}
1.3.2 活动的生命周期

Android使用任务Task管理活动,一个任务就是一组存放在返回栈Back Stack里的活动的集合

1.3.2.1 活动状态
状态名特征
运行状态一个活动位于返回栈栈顶(最不愿意回收)
暂停状态不位于栈顶,但是可见(内存极低,才可能回收)
停止状态不位于栈顶,不可见(有可能会被回收)
销毁状态从返回栈中移除(倾向于回收)
image-20241106141932139 image-20241106142149939

所以onCreate的参数Bundle savedInstanceState一般情况下是null 如果活动在被系统回收之前有通过onSaveInstanceState()这个方法保存数据,这个参数会带有之前保存的全部数据(键值对形式)

1.3.2.2 启动模式
standard,singleTop,singleTask,singleInstance
image-20241106145938324

singleInstance原理

1.3.3 UI组件

button,textview,progressBar,AlertDialog等组件 具体细节不作赘述,布局大部分使用约束布局Constraintlayout。

android:visibility 指定控件的可见属性,visible--可见 invisible--不可见但是占据位置 gone--不可见且不占用原来的位置和大小
0dp是一种比较规范的写法,用于指定控件的大大小、间距等属性的单位
帧布局FrameLayout,没有方便的定位方式,所有控件都会默认摆放在布局的左上角

注:ListView是展示大量数据,需要将数据提供好,数组中的数据无法直接传递给ListView,所以需要适配器来完成例如ArrayAdapter,调用listview.setAdapter

View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.fruit_item, parent, false);

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

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

相关文章

设备租借系统(源码+文档+部署+讲解)

本文将深入解析“设备租借系统”的项目&#xff0c;探究其架构、功能以及技术栈&#xff0c;并分享获取完整源码的途径。 系统概述 本项目名称为设备租借系统&#xff0c;是对企业内部设备进行信息化管理的系统&#xff0c;可以实现设备的借用、归还、状态跟踪等功能&#xff…

使用 PageHelper 在 Spring Boot 项目中实现分页查询

目录 前言1. 项目环境配置1.1 添加 PageHelper 依赖1.2 数据库和 MyBatis 配置 2. 统一的分页响应类3. 使用 PageHelper 实现分页查询3.1 Service 层分页查询实现3.2 PageHelper 分页注意事项 4. 控制层调用示例5. 常见问题与解决方案5.1 java.util.ArrayList cannot be cast t…

【C++】C++移动语义、左值右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符

二十五、C移动语义、左值和右值、左值引用右值引用、移动构造函数、std::move、移动赋值操作符 本部分讨论一些更高级的C特性&#xff1a;C移动语义。但是讲移动语义之前我们得先了解什么左值右值、左值引用和右值引用。 1、C的左值和右值、左值引用和右值引用左值是有地址的…

【国内中间件厂商排名及四大中间件对比分析】

国内中间件厂商排名 随着新兴技术的涌入&#xff0c;一批国产中间件厂商破土而出&#xff0c;并在短时间内迅速发展&#xff0c;我国中间件市场迎来洗牌&#xff0c;根据市占率&#xff0c;当前我国中间件厂商排名依次为&#xff1a;东方通、宝兰德、中创股份、金蝶天燕、普元…

Android自启动管控

1. 自启动管控需求来源 自启动、关联启动、交叉启动、推送启动等现象的泛滥除了对个人信息保护带来隐患外&#xff0c;还会导致占用过多的系统CPU和内存资源&#xff0c;造成系统卡顿、发热、电池消耗过快&#xff1b;还可能引入一些包含“恶意代码”的进程在后台隐蔽启动&…

C++上机实验|多态性编程练习

1.实验目的 (1)理解多态性的概念。 (2)掌握如何用虚函数实现动态联编 (3)掌握如何利用虚基类。 2.实验内容 设计一个飞机类 plane,由它派生出歼击机类fighter和轰炸机类 bomber,歼击机类fighter 和轰炸机类bomber 又共同派生出歼轰机(多用途战斗机)。利用虚函数和虚基类描述…

ctfshow(328)--XSS漏洞--存储型XSS

Web328 简单阅读一下页面。 是一个登录系统&#xff0c;存在一个用户管理数据库。 那么我们注册一个账号&#xff0c;在账号或者密码中植入HTML恶意代码&#xff0c;当管理员访问用户管理数据库页面时&#xff0c;就会触发我们的恶意代码。 思路 我们向数据库中写入盗取管理员…

Kubernetes的概述与架构

Kubernetes 的概述 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态系统&#xff0c;其服务、支持和工具的使用范围广泛。 Kubernetes 这个名字源于…

crond 任务调度 (Linux相关指令:crontab)

相关视频链接 crontab 进行 定时任务 的设置 概述 任务调度&#xff1a;是指系统在某个时间执行的特定的命令或程序 任务调度的分类&#xff1a; 1.系统工作&#xff1a;有些重要的工作必须周而复始地执行。如病毒扫描等。 2.个别用户可能希望执行某些程序&#xff0c;比如…

408最后冲刺阶段,怎么做题才能考到120+?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 重要性排序如下&#xff1a;真题占据首位&#xff0c;紧随其后的是王道模拟题&#xff0c;王道书与题目则紧随其后&#xff0c;而408统考配套习题&#xff08;高教版&#xff09;与之大致相当。 真题&#xff0c;无疑…

uniapp上拉刷新下拉加载

方法一&#xff1a; z-paging 的组件库&#xff1a; show-loading-more-no-more-view"false" 该属性控制是否显示 "加载更多" 或 "没有更多" 的提示。如果设为 false&#xff0c;则不会显示这些提示。如果设为 true&#xff0c;当数据加载完毕…

Java I/O(输入/输出)——针对实习面试

目录 Java I/O&#xff08;输入/输出&#xff09;什么是Java I/O流&#xff1f;字节流和字符流有什么区别&#xff1f;什么是缓冲流&#xff1f;为什么要使用缓冲流&#xff1f;Java I/O中的设计模式有哪些&#xff1f;什么是BIO&#xff1f;什么是NIO&#xff1f;什么是AIO&am…

AJAX 全面教程:从基础到高级

AJAX 全面教程&#xff1a;从基础到高级 目录 什么是 AJAXAJAX 的工作原理AJAX 的主要对象AJAX 的基本用法AJAX 与 JSONAJAX 的高级用法AJAX 的错误处理AJAX 的性能优化AJAX 的安全性AJAX 的应用场景总结与展望 什么是 AJAX AJAX&#xff08;Asynchronous JavaScript and XML…

本地保存mysql凭据实现免密登录mysql

本地保存mysql凭据 mysql加密登录文件简介加密保存mysql用户的密码到本地凭据 mysql加密登录文件简介 要在 mysql客户端 上连接 MySQL 而无需在命令提示符上输入用户名和口令&#xff0c;下列三个位置可用于存储用户的mysql 凭证来满足此要求。 配置文件my.cnf或my.ini /etc…

图形几何之美系列:仿射变换矩阵(二)

“ 在几何计算、图形渲染、动画、游戏开发等领域&#xff0c;常需要进行元素的平移、旋转、缩放等操作&#xff0c;一种广泛应用且简便的方法是使用仿射变换进行处理。相关的概念还有欧拉角、四元数等&#xff0c;四元数在图形学中主要用于解决旋转问题&#xff0c;特别是在三维…

Jmeter的安装,设置中文,解决乱码问题

1.Jmeter安装 1-Jmeter如何下载 1---我这里提供一个下载快的方式 https://www.123684.com/s/lWZKVv-4jiav?提取码:4x4y 2---Jmeter官网下载地址 Apache JMeter - Download Apache JMeter 2-配置java环境 1---下载javaJDK 官方下载地址 https://www.oracle.com/java/techno…

【Uniapp】Uniapp Android原生插件开发指北

前言 在uniapp开发中当HBuilderX中提供的能力无法满足App功能需求&#xff0c;需要通过使用Andorid/iOS原生开发实现时&#xff0c;或者是第三方公司提供的是Android的库&#xff0c;这时候可使用App离线SDK开发原生插件来扩展原生能力。 插件类型有两种&#xff0c;Module模…

微信小程序——用户隐私保护指引填写(详细版)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

reg注册表研究与物理Hack

reg注册表研究与物理Hack 声明&#xff1a;内容的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 目录 reg注册表研究与物理HackWindows注册表修改注册表实现应用程序开机…

[论文粗读][REALM: Retrieval-Augmented Language Model Pre-Training

引言 今天带来一篇检索增强语言模型预训练论文笔记——REALM: Retrieval-Augmented Language Model Pre-Training。这篇论文是在RAG论文出现之前发表的。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 语言模型预训练…