热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidStudio中Activity组件详解

本文介绍了Android开发中Activity的基本概念、生命周期、状态转换以及如何创建和管理Activity。通过详细的解释和示例代码,帮助开发者更好地理解和使用Activity。
一、Activity 基本概念

Activity 是 Android 应用程序的基本构建块之一,用于提供用户界面并与用户进行交互。每个 Activity 都是一个独立的屏幕,可以包含各种 UI 元素。



二、Activity 的状态

1. 运行状态


当 Activity 处于栈顶时,它处于运行状态,此时系统最不可能回收该 Activity。



2. 暂停状态


当 Activity 不在栈顶但仍部分可见时,它进入暂停状态。例如,当一个新的透明 Activity 被启动时,原来的 Activity 就会进入暂停状态。



3. 停止状态


当 Activity 完全不可见时,它进入停止状态。此时,系统可能会选择回收该 Activity 以释放资源。



4. 销毁状态


当 Activity 被从栈中移除时,它进入销毁状态。这是系统最可能回收的 Activity 状态,以确保内存充足。



三、Activity 生命周期

Activity 的生命周期由多个回调方法组成,这些方法在 Activity 的不同状态之间转换时被调用。



1. 生命周期方法


Activity 生命周期图



1.1 onCreate()


当 Activity 第一次创建时调用,通常用于初始化 Activity,如设置布局文件和绑定成员变量。



1.2 onStart()


当 Activity 从不可见到可见时调用,通常用于执行一些初始化操作。



1.3 onResume()


当 Activity 准备与用户交互时调用,此时 Activity 处于栈顶且处于运行状态。在这个方法中可以执行一些轻量级的操作以提高用户体验。



1.4 onPause()


当 Activity 准备去启动或恢复另一个 Activity 时调用。在这个方法中应保存一些关键状态,以防系统因内存不足而销毁 Activity。



1.5 onStop()


当 Activity 完全不可见时调用。可以在这个方法中执行一些耗时的操作,如写入数据库。



1.6 onDestroy()


当 Activity 被销毁前调用,通常用于释放资源。



1.7 onRestart()


当 Activity 从停止状态重新变为可见时调用。可以在这个方法中恢复 Activity 的状态。



四、Activity 栈管理

Android 使用任务栈来管理 Activity。每个应用启动时都会创建一个任务栈,新的 Activity 实例会被压入栈中。栈顶的 Activity 总是可见且可交互的。



五、创建和管理 Activity

1. 创建 Activity


a. 创建新类


在项目中创建一个新的 Java 类,并继承自 android.app.Activity



b. 复写 onCreate() 方法


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}


c. 创建布局文件


res/layout 目录下创建一个新的布局文件。



d. 设置布局


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}


e. 在 AndroidManifest.xml 中注册 Activity





2. 启动 Activity


a. 创建按钮


    android:id="@+id/button_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动新 Activity" />


b. 添加点击事件


Button buttOnStart= findViewById(R.id.button_start);
buttonStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, NewActivity.class);
startActivity(intent);
}
});


3. 关闭 Activity


a. 创建按钮


    android:id="@+id/button_exit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="退出 Activity" />


b. 添加点击事件


Button buttOnExit= findViewById(R.id.button_exit);
buttonExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});


六、Activity 启动模式

Activity 的启动模式包括 standard、singleTop、singleTask 和 singleInstance。每种模式决定了 Activity 如何被创建和添加到任务栈中。



七、Intent 的使用

1. 显式 Intent


显式 Intent 用于直接启动已知的 Activity。


Intent intent = new Intent(this, TargetActivity.class);
startActivity(intent);


2. 隐式 Intent


隐式 Intent 通过 action 和 category 来匹配目标 Activity。


Intent intent = new Intent();
intent.setAction("com.example.ACTION_NAME");
startActivity(intent);


AndroidManifest.xml 中声明 Intent Filter:









推荐阅读
  • 本文介绍了基于Java的汽车租赁系统开发,涵盖了从车辆采购预算到车辆维护的全过程管理。该系统利用现代互联网技术和数据库技术,实现了汽车租赁行业的全面信息化。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 利用HTML5 Canvas高效构建电信网络拓扑图
    电信网络拓扑图在实际应用中具有很高的实用价值。本文介绍了一个基于HTML5 Canvas的电信网络拓扑图项目,不仅实现了基本的图形展示功能,还加入了自动布局和属性栏功能,使项目更加完善。此Demo经过细微调整即可直接应用于实际项目中。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 请看|差别_Android 6.0 运行时权限处理解析
    请看|差别_Android 6.0 运行时权限处理解析 ... [详细]
  • 本文介绍如何利用QFileSystemModel进行目录的浏览、创建及删除操作,并提供了一个简单的对话框界面实现。 ... [详细]
author-avatar
张骞在这里
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有