Android--第一个android程序

embedded/2024/10/23 9:55:24/

 写在前边

※安卓开发工具常用模拟器汇总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或模拟器来恢复正常的操作。

http://www.ppmy.cn/embedded/129787.html

相关文章

Linux中输入和输出基本过程

目录 Linux中输入和输出基本过程 文件内核级缓冲区 何为重定向 子进程与缓冲区 手撕一个简单的shell&#xff08;版本2&#xff09; 判断重定向命令与截取 执行重定向 简单实现stdio.h中的文件相关操作 FILE结构体 fopen函数 fwrite函数 fflush函数 fclose函数 Li…

TLS实验报告

Task 1: TLS Client 3.1 Task 1.a: TLS handshake &#xff1a; 修改一下配置文件handshake.py内容&#xff1a; 然后输入指令&#xff1a;./handshake.py www.baidu.com 和百度进行握手。 执行得到如下图结果&#xff1a; 针对实验手册中提出的问题&#xff0c;我们回答如…

某科技——北京——国护蓝中研判岗

文章目录 所面试的公司&#xff1a;某科技所在城市&#xff1a;北京面试职位&#xff1a;国护蓝中研判岗面试过程&#xff1a; 面试官的问题&#xff1a;1、面试官先就是很常态化的让我做了一个自我介绍2、自我介绍不错&#xff0c;听你讲熟悉TOP10漏洞&#xff0c;可以讲下自己…

快速对比:Django、Spring Boot、Node.js 和 PHP

在软件开发的世界中&#xff0c;后端技术栈的选择对项目的成败起着至关重要的作用。不同的框架和编程语言在开发效率、运行速度、并发能力和稳定性等方面各具优势。那么&#xff0c;当开发者独自承担项目时&#xff0c;如何选择合适的技术栈呢&#xff1f;本文将通过简略分析 D…

Java面试题七

一、Java中的集合框架是如何组织的&#xff1f;列举几个常用的集合类。 Java中的集合框架是一个设计用来存储和操作对象集合的统一架构。它主要由两大接口派生出来&#xff1a;Collection和Map。这两个接口及其子接口和实现类共同构成了Java集合框架的主体。 集合框架的组织结…

vue使用jquery的ajax,页面跳转

一、引入jquery依赖 打开终端更新npm npm install -g npm 更新完后引入输入npm install jquery 加载完后 在最外层的package.json文件中加入以下代码 配置好后导入jquery 设置变量用于接收服务器传输的数据 定义ajax申请数据 服务器的Controller层传输数据 &#xff08;…

【本科毕业设计】基于单片机的智能家居防火防盗报警系统

基于单片机的智能家居防火防盗报警系统 相关资料链接下载摘要Abstract第1章 绪论1.1课题的背景1.2 研究的目的和意义 第2章 系统总体方案设计2.1 设计要求2.2 方案选择和论证2.2.1 单片机的选择2.2.2 显示方案的选择 第3章 系统硬件设计3.1 整体方案设计3.1.1 系统概述3.1.2 系…

工作日志:vue3各种警告

1、遇见报错&#xff0c;但也没啥影响&#xff0c;不知怎么回事。 可是我没写过这东西啊。 2、一个警告。 它表示在渲染过程中尝试访问组件实例上不存在的属性linkTags。 解决办法&#xff1a;在该属性前&#xff0c;加个v-if判断。 3、 意味着在模板渲染过程中尝试访问了…