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

Android--第一个android程序

 写在前边

※安卓开发工具常用模拟器汇总Android开发者必备工具-常见Android模拟器(MuMu、夜神、蓝叠、逍遥、雷电、Genymotion...)_安卓模拟器-CSDN博客

※一般游戏模拟器运行速度相对较快,本文选择逍遥模拟器_以下是Android Studio连接模拟器实现(先从以上博文中下载逍遥模拟器)

Android studio连接逍遥安卓模拟器_逍遥模拟器怎么连接android studio-CSDN博客


新建工程exp1

新建项目--Empty Activity(选择java语言),工程目录如下:

项目创建完成,逍遥模拟器下载后,Android Studio连接模拟器Asus ASUS_I005DA;

运行app后显示如下: 

MainActivity.java文件

它是应用程序的主要活动(Activity),负责处理用户与应用程序之间的交互。 它包含了应用程序的主要逻辑和界面设计,主要是实现功能设计

MainActivity类继承了AppCompatActivity类;并重写override其中的函数onCreate函数;

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);//MainActivity.java和activity_main.xml如何建立联系:ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});
}
activity_main.xml文件

activity_main.xml其实就是一个布局文件;手动拖动的控件系统可以帮忙自动生成xml代码,该文件有code、split、design三个界面;我们大多通过code进行页面设计;


【以下测试使用模拟器Medium Phone API 35】

a.程序正常启动和关闭

程序运行: 

程序结束: 

(1)程序开始运行时经过了三个状态,分别为onCreate(), onStart(),onResume()

onCreate: Activity启动以后第一个被调用的函数,用来进行初始化。

onStart(): Activity显示到屏幕上时会被调用。

onResume(): Activity可以接受用户的输入时,会被调用,处于Activity栈的栈顶。

(2)程序关闭时【在overview界面清除程序后台】经过了四个状态,分别为onPause(),onStop(),on SaveInstanceState()和onDestroy()

onPause(): Activity进入暂停状态时被调用。

onStop(): Activity不对用户可见以后,就会被调用,Activity进入停止状态。

on SaveInstanceState():保存Acticivity被销毁前的状态:在离开页面的时候用onSaveInstanceState中的outState可以保存你所需要的值;

onDestory: Activity被终止前,或者说进入非活动状态时,会被调用。

b.电话_程序运行与中断

程序运行:

 切换打电话页面:

重新切换回程序页面:

 (1)程序开始运行时经过了三个状态,分别为onCreate(), onStart(),onResume():

onCreate: Activity启动以后第一个被调用的函数,用来进行初始化。

onStart(): Activity显示到屏幕上时会被调用。

onResume(): Activity可以接受用户的输入时,会被调用,处于Activity栈的栈顶。

(2)程序打电话时经过了三个状态,分别为onPause(),onStop(),on SaveInstanceState():

onPause(): onPause(): Activity进入暂停状态时被调用。

onStop(): Activity不对用户可见以后,就会被调用,Activity进入停止状态。

切换界面打电话,导致原有程序进入不可见的状态,所以先执行onPause在执行onStop()回调函数。

on SaveInstanceState():保存Acticivity被销毁前的状态:在离开页面的时候用onSaveInstanceState中的outState可以保存你所需要的值;

(3)程序在电话挂断的时候经过了三个状态,分别为onRestart(),onStart(),onResume():

onRestart(): Activity从停止状态进入活动状态。

onStart(): Activity显示到屏幕上时会被调用。

onResume(): Activity可以接受用户的输入时,会被调用,处于Activity栈的栈顶。

电话挂断以后,重新进入原程序界面,所以会经历重启,接受用户输入的过程。

c.短信_程序运行与中断

 程序运行:

短信发送页面:

重新切回程序:

(1)程序开始运行时经过了三个状态,分别为onCreate(), onStart(),onResume():

onCreate: Activity启动以后第一个被调用的函数,用来进行初始化。

onStart(): Activity显示到屏幕上时会被调用。

onResume(): Activity可以接受用户的输入时,会被调用,处于Activity栈的栈顶。

(2)程序发送短信经过了三个状态,分别为onPause(),onStop(),on SaveInstanceState():

onPause(): onPause(): Activity进入暂停状态时被调用。

onStop(): Activity不对用户可见以后,就会被调用,Activity进入停止状态。

切换界面发短信,导致原有程序进入不可见的状态,所以先执行onPause在执行onStop()回调函数。

on SaveInstanceState():保存Acticivity被销毁前的状态:在离开页面的时候用onSaveInstanceState中的outState可以保存你所需要的值;

(3)程序在短信界面切回的时候经过了三个状态,分别为onRestart(),onStart(),onResume():

onRestart(): Activity从停止状态进入活动状态。

onStart(): Activity显示到屏幕上时会被调用。

onResume(): Activity可以接受用户的输入时,会被调用,处于Activity栈的栈顶。

//Mainactivity.java
package com.example.exp1;import android.content.Intent;
import android.content.IntentSender;
import android.os.Bundle;import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;import android.util.Log;public class MainActivity extends AppCompatActivity {private static String TAG="LIFTCYCLE";@Override    //重写onCreate函数,完全生命周期的开始,用来进行activity初始化public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//EdgeToEdge.enable(this);setContentView(R.layout.activity_main);Log.i(TAG,"(1)onCreate()");}//可视生命周期的开始,activity显示在屏幕上调用;@Overridepublic void onStart(){super.onStart();Log.i(TAG,"(2)onStart()");}@Override//恢复onsaveInstanceState()保护的用户界面信息public void onRestoreInstanceState(Bundle savedInstanceState){super.onRestoreInstanceState(savedInstanceState);Log.i(TAG,"(3)onRestoreInstanceState()");}@Override//活动生命周期开始时被调用,恢复被onPause()停止的用于UI更新的资源public void onResume(){super.onResume();Log.i(TAG,"(4)onResume()");}@Override//在onResume()后被掉用,保存界面信息public void onSaveInstanceState(Bundle savedInstaceState){super.onSaveInstanceState(savedInstaceState);Log.i(TAG,"(5)onSaveInstanceState()");}@Override//在重新进入可视生命周期前调用public void onRestart(){super.onRestart();Log.i(TAG,"(6)onRestart()");}@Override//在活动生命周期结束时调用;public void onPause(){super.onPause();Log.i(TAG,"(7)onPause()");}@Override//在可视生命周期时调用public void onStop(){super.onStop();Log.i(TAG,"(8)onStop()");}@Override//在完全生命周期结束时调用public void onDestroy(){super.onDestroy();Log.i(TAG,"(9)onDestroy()");}
}
//abdroidmanifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" ><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.Exp1"tools:targetApi="31" ><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></application></manifest>
//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="这是第一个Android程序"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

问题:

Medium Phone API 35 is already running. If that is not the case, delete C:\Users\DELL\.android\avd\Medium_Phone_API_35.avd\*.lock and try again.

打开任务管理器:按下键盘上的Ctrl+Shift+Esc组合键,这将直接打开任务管理器。或者,你也可以通过右键点击任务栏,然后选择“任务管理器”来打开它。

  1. 查找Android模拟器进程:在任务管理器中,切换到“进程”选项卡(在Windows 10及更高版本中,这通常是默认显示的选项卡);滚动进程列表,查找与Android模拟器相关的进程。这些进程可能包含“emulator”、“qemu”、“adb”(Android Debug Bridge)或“studio64.exe”(如果Android Studio正在运行64位版本)等字样。※注意,进程名称可能会因Android Studio的版本或安装的模拟器而有所不同。
  2. 结束进程:如果你找到了与Android模拟器相关的进程,并且确定它是不再需要的,你可以右键点击该进程,然后选择“结束任务”来关闭它。※警告:结束某些进程可能会导致数据丢失或系统不稳定。特别是与Android模拟器相关的进程,结束它们可能会导致正在运行的模拟器实例关闭,并可能丢失未保存的模拟器状态或数据。因此,在结束进程之前,请确保你了解该进程的作用,并谨慎操作。
  3. 重启Android Studio或模拟器:有时候,结束与模拟器相关的进程后,你可能需要重启Android Studio或模拟器来恢复正常的操作。

相关文章:

Android--第一个android程序

写在前边 ※安卓开发工具常用模拟器汇总Android开发者必备工具-常见Android模拟器(MuMu、夜神、蓝叠、逍遥、雷电、Genymotion...)_安卓模拟器-CSDN博客 ※一般游戏模拟器运行速度相对较快&#xff0c;本文选择逍遥模拟器_以下是Android Studio连接模拟器实现(先从以上博文中…...

MySQL的并行复制原理

1. 并行复制的概念 并行复制&#xff08;Parallel Replication&#xff09;是一种通过同时处理多个复制任务来加速数据复制的技术。它与并发复制的区别在于&#xff0c;并行复制更多关注的是数据块或事务之间的并行执行&#xff0c;而不是单纯的任务并发。在数据库主从复制中&…...

2023年五一杯数学建模C题双碳目标下低碳建筑研究求解全过程论文及程序

2023年五一杯数学建模 C题 双碳目标下低碳建筑研究 原题再现&#xff1a; “双碳”即碳达峰与碳中和的简称&#xff0c;我国力争2030年前实现碳达峰&#xff0c;2060年前实现碳中和。“双碳”战略倡导绿色、环保、低碳的生活方式。我国加快降低碳排放步伐&#xff0c;大力推进…...

信息安全工程师(57)网络安全漏洞扫描技术与应用

一、网络安全漏洞扫描技术概述 网络安全漏洞扫描技术是一种可以自动检测计算机系统和网络设备中存在的漏洞和弱点的技术。它通过使用特定的方法和工具&#xff0c;模拟攻击者的攻击方式&#xff0c;从而检测存在的漏洞和弱点。这种技术可以帮助组织及时发现并修补漏洞&#xff…...

练习题 - Scrapy爬虫框架 Spider Middleware 爬虫页中间件

在 web 爬虫开发中,Scrapy 是一个非常强大且灵活的框架,它可以帮助开发者轻松地从网页中提取数据。Scrapy 的下载器中间件(Downloader Middleware)是 Scrapy 处理下载请求和响应的一个重要组件。通过使用和编写下载器中间件,开发者可以自定义请求的处理过程,增加请求头信…...

探索C++的工具箱:双向链表容器类list(1)

引言 在C中&#xff0c;std::list 是一个标准库提供的容器类&#xff0c;属于C STL&#xff08;标准模板库&#xff09;。std::list 是一种独特而强大的容器&#xff0c;它使用双向链表结构来管理元素。无论是在处理动态数据集合&#xff0c;还是在需要频繁进行插入和删除操作时…...

大厂高频算法考点--单调栈

什么是单调栈&#xff1a; 单调栈就是借助一个栈&#xff0c;在仅仅使用当前栈的条件下&#xff0c;时间复杂度是N&#xff08;n&#xff09;,将每个节点最有离这他最近的大于或者是小于的数据返回&#xff0c;将已知数组的元素放到栈里。再自我实现的代码里面我们使用数组实现…...

Unity使用Git及GitHub进行项目管理

git: 工作区,暂存区(存放临时要存放的内容),代码仓库区1.初始化 git init 此时展开隐藏项目,会出现.git文件夹 2.减小项目体积 touch .gitignore命令 创建.gitignore文件夹 gitignore文件夹的内容 gitignore中添加一下内容 # This .gitignore file should be place…...

如何将本地 Node.js 服务部署到宝塔面板:完整的部署指南

文章简介&#xff1a; 将本地开发的 Node.js 项目部署到线上服务器是开发者常见的工作流程之一。在这篇文章中&#xff0c;我将详细介绍如何将本地的 Node.js 服务通过宝塔面板&#xff08;BT 面板&#xff09;上线。宝塔面板是一个强大的服务器管理工具&#xff0c;具有简洁的…...

SpringBoot项目启动报错:命令行太长解决

文章目录 SpringBoot项目启动报错&#xff1a;命令行太长解决1. 第一种方法1. 第二种方法1-1 旧版本Idea1-2 新版本Idea 3. 重新启动SpringBoot项目即可解决 SpringBoot项目启动报错&#xff1a;命令行太长解决 报错信息&#xff1a; 1. 第一种方法 1. 第二种方法 找到项目…...

使用Docker启动的Redis容器使用的配置文件路径等问题以及Python使用clickhouse_driver操作clickhouse数据库

一、使用Docker启动的Redis容器使用的配置文件路径等问题 1.docker启动的redis使用的配置文件路径是什么 使用docker搭建redis服务&#xff0c;本身redis启动的时候可以指定配置文件的&#xff0c; redis-server /指定配置文件路径/redis.conf。 但手上也没有一个redis配置文件…...

硬盘格式化后能恢复数据吗?4款好用的数据恢复软件,格式化后也能安心

咱们今天来谈谈一个挺烦人的问题——硬盘格式化后能恢复数据吗&#xff1f;别担心&#xff0c;能的&#xff01;只要你用对方法&#xff0c;就算硬盘被清空了&#xff0c;那些重要文件还是能找回来的。下面&#xff0c;我就给你们介绍几款超给力的数据恢复软件&#xff0c;让你…...

【选择C++游戏开发技术】

在选择C游戏开发技术时&#xff0c;以下几个因素是需要考虑的&#xff1a; 1. 游戏类型&#xff1a;不同类型的游戏可能需要不同的技术。例如&#xff0c;2D游戏通常采用基于精灵的引擎&#xff0c;而3D游戏通常采用基于物理模拟的引擎。根据游戏类型选择适合的技术是很重要的…...

Oracle数据库系统表空间过大,清理SYSTEM、SYSAUX表空间

一.前言 在oracle数据库中&#xff0c;system为系统表空间&#xff0c;存放着一些我们经常用到的系统表和视图&#xff0c;sysaux为辅助表空间&#xff0c;辅助着系统表空间。这两个表空间不宜添加数据文件&#xff0c;会使系统表空间过于臃肿&#xff0c;从而影响数据库的使用…...

LaTeX参考文献工具和宏包bibmap项目简介

LaTeX参考文献工具和宏包bibmap项目简介 LaTeX 中的参考文献生成方式主要有三种&#xff1a;第一种是手动写thebibliography环境的&#xff0c;第二种事基于bibtex程序的&#xff0c;第三种则是基于biblatex宏包和biber程序的。本文介绍的bibmap项目则提供了第四种方法。目前b…...

微软的 Drasi:一种轻量级的事件驱动编程方法

微软的开源数据变化处理平台有望提供一种全新的方式来构建和管理可产生持续事件流的云应用程序。 Microsoft Azure 孵化团队是微软超大规模云中比较有趣的组成部分之一。它介于传统软件开发团队和研究组织之间&#xff0c;致力于构建大规模分布式系统问题的解决方案。 这些解决…...

vue3 笔记-插槽

结构类似的模块&#xff0c;我们可以考虑用插槽&#xff0c;以便后续复用&#xff1a; 代码&#xff1a; 1.插槽 <script setup> defineProps({title: {required: true,type: String},number: {required: true,type: Number} }) </script><template><d…...

C# 字符串常用方法

文章目录 Length&#xff1a;获取字符串中字符的个数&#xff08;不包括末尾的空字符&#xff09;ToLower() 和 ToUpper()&#xff1a;将字符串转换为小写或大写形式Substring(int startIndex, int length)&#xff1a;从指定索引开始截取指定长度的子字符串Remove(int startIn…...

字节跳动青训营——入营考核解答(持续更新中~~~)

考核内容&#xff1a; 在指定的题库中自主选择不少于 15 道算法题并完成解题&#xff0c;其中题目难度分配如下&#xff1a; 简单题不少于 10 道中等题不少于 4 道困难题不少于 1 道 解答代码 8.进制求和转换&#xff08;难&#xff09; 代码实现&#xff1a; import jav…...

JavaWeb合集15-Apache POI

十五、Apache POI Apache POI是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用POI在Java 序中对Miscrosoft Office各种文件进行读写操作。一般情况下&#xff0c;POI都是用于操作Excel文件。 使用场景&#xff1a;银行网银系统导出交…...

Threejs 实现3D 地图(01)创建基本场景

"d3": "^7.9.0", "three": "^0.169.0", "vue": "^3.5.10" <script setup> import { onMounted,ref } from vue import * as THREE from three import * as d3 from "d3"; //莫开托坐标 矫正地图…...

snmpdelta使用说明

1.snmpdelta介绍 snmpdelta命令是用来获取下一个节点的OID的值。 2.snmpdelta安装 1.snmpdelta安装 命令: yum -y install net-snmp net-snmp-utils [root@logstash ~]# yum -y install net-snmp net-snmp-utils Loaded plugins: fastestmirror Loading mirror speeds f…...

Hadoop集群安装

集群规划 node01node02node03角色主节点从节点从节点NameNode√DataNode√√√ResourceManager√NodeManager√√√SecondaryNameNode√Historyserver√ 上传安装包到node01 解压到指定目录 tar -zxvf /bigdata/soft/hadoop-3.3.3.tar.gz -C /bigdata/server/ 创建软链接 cd…...

VuePress集成到Vue项目的方法

VuePress 可以作为一个独立的静态站点生成器来使用&#xff0c;也可以集成到现有的 Vue 项目中。以下是将 VuePress 集成到 Vue 项目的几种方法&#xff1a; 1. 作为本地依赖集成 如果你想在现有的 Vue 项目中使用 VuePress 来管理文档&#xff0c;你可以将 VuePress 安装为本…...

【ROS】ROS局域网下多机通讯方法

最近工作中需要用到多机通讯&#xff0c;这里稍微总结一下使用方法。 目录 一、网络配置 二、修改两个设备的hosts文件 三、修改两个ros设备的.bashrc 四、launch文件中给节点设定运行的设备 一、网络配置 首先确保两个ros设备连接到同一局域网下&#xff0c;然后查询两个…...

linux 系统怎么使用

Linux系统的使用涉及多个方面&#xff0c;包括文件管理、目录操作、用户管理、进程管理、网络配置等。以下是对Linux系统基础使用的详细介绍&#xff1a; 一、文件管理 查看文件和目录 ls&#xff1a;列出当前目录的内容。ls -l&#xff1a;以长格式列出当前目录的内容&#x…...

Java线程池知识点梳理

Java线程池知识点梳理 什么是线程池&#xff1f; 线程在系统中创建的成本是相对比较高的&#xff0c;所以使用”池化“的思想&#xff0c;设计线程池&#xff0c;有大量任务需要执行时&#xff0c;可以直接从线程池中使用已经创建好的线程直接去执行。减少线程的创建和销毁带…...

SFT、RLHF、DPO、IFT —— LLM 微调的进化之路_如何搭建自己的dpo

TL;DR • SFT、RLHF 和 DPO 都是先估计 LLMs 本身的偏好&#xff0c;再与人类的偏好进行对齐&#xff1b; • SFT 只通过 LLMs 生成的下一个单词进行估计&#xff0c;而 RLHF 和 DPO 通过 LLMs 生成的完整句子进行估计&#xff0c;显然后者的估计会更准确&#xff1b; • 虽然…...

CSS 选择器简单回顾

引言 当我们探讨网页设计和开发时, CSS(层叠样式表) 无疑是一个不可或缺的技术, 它使我们能够精确控制网页的外观和布局, 为用户创造出独特的视觉体验、以及良好的交互体验!! 而一个完整的 CSS 规则则是由两个主要部分组成: 选择器和声明块 那么今天我们就来盘点下常见的几种选…...

uniapp配置微信小程序分包(分包优化)

1.manifest.json中 源码视图中找到mp-weixin&#xff0c;新增代码"optimization":{"subPackages":true}&#xff0c;如下图所示 "optimization" : {"subPackages" : true } 2.pages.json中 分包内静态文件示例 "subPackages&…...