热门标签 | 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中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
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社区 版权所有