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函数;

java 复制代码
@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栈的栈顶。

java 复制代码
//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显示在屏幕上调用;
    @Override
    public 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()");
    }
}
java 复制代码
//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" >

    <application
        android: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" >
        <activity
            android: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>
java 复制代码
//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns: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">
    <TextView
      android: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或模拟器来恢复正常的操作。
相关推荐
幻雨様3 小时前
UE5多人MOBA+GAS 45、制作冲刺技能
android·ue5
Jerry说前后端5 小时前
Android 数据可视化开发:从技术选型到性能优化
android·信息可视化·性能优化
Meteors.6 小时前
Android约束布局(ConstraintLayout)常用属性
android
alexhilton6 小时前
玩转Shader之学会如何变形画布
android·kotlin·android jetpack
whysqwhw10 小时前
安卓图片性能优化技巧
android
风往哪边走10 小时前
自定义底部筛选弹框
android
Yyyy48211 小时前
MyCAT基础概念
android
Android轮子哥12 小时前
尝试解决 Android 适配最后一公里
android
雨白13 小时前
OkHttp 源码解析:enqueue 非同步流程与 Dispatcher 调度
android
风往哪边走13 小时前
自定义仿日历组件弹框
android