iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >简单介绍Android开发中的Activity控件的基本概念
  • 307
分享到

简单介绍Android开发中的Activity控件的基本概念

activityandroid开发Android 2022-06-06 09:06:54 307人浏览 安东尼
摘要

Activity是最基本的模块,一般称之为"活动",在应用程序中,一个Activity通常就是一个单独的屏幕。简单理解,Activity代表一个用户所能看到的屏幕,主要用于处理

Activity是最基本的模块,一般称之为"活动",在应用程序中,一个Activity通常就是一个单独的屏幕。简单理解,Activity代表一个用户所能看到的屏幕,主要用于处理应用程序的整体性工作,例如监听系统事件,为用户显示指定的View,启动其他Activity等。所有应用的Activity都继承于Android.app.Activity类,该类是Android提供的基层类,其他的Activity继承该父类后,通过父类的方法来实现各种功能。

Activity 生命周期图如下:

2015121152423025.png (538×668)

在android中,Activity拥有四种基本状态:

1、Active/Runing一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。

2、Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。

3、Stoped 当 Activity 被另外一个 Activity 覆盖、失去焦点并不可见时处于 Stoped状态。

4、Killed Activity 被系统杀死回收或者没有被启动时处于 Killed状态。

当一个 Activity 实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。

如上所示,Android 程序员可以决定一个 Activity 的"生",但不能决定它的"死",也就时说程序员可以启动一个 Activity,但是却不能手动的"结束"一个 Activity。当你调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:告诉 Activity Manager 该 Activity 实例完成了相应的工作,可以被"回收"。随后 Activity Manager 激活处于栈第二层的 Activity 并重新入栈,同时原 Activity 被压入到栈的第二层,从 Active 状态转到 Paused 状态。例如:从 Activity1 中启动了 Activity2,则当前处于栈顶端的是 Activity2,第二层是 Activity1,当我们调用 Activity2.finish()方法时,Activity Manager 重新激活 Activity1 并入栈,Activity2 从 Active 状态转换 Stoped 状态,Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被执行,Activity2 返回的数据通过 data参数返回给 Activity1。

非用户行为把activity不可见的时候,例如电话忽然来了==



  @Override
  protected void onRestoreInstanceState(Bundle savedInstanceState) {
    Log.i("onRestoreInstanceState",savedInstanceState.getString("name"));
    super.onRestoreInstanceState(savedInstanceState);
  }
  
  @Override
  protected void onSaveInstanceState(Bundle outState) {
    outState.putString("name", "简明现代魔法");
    super.onSaveInstanceState(outState);
  }

在android里,有4种activity的启动模式,分别为:

  ·standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。   ·singleTop: 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。   ·singleTask: 会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。   ·singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。

  这些启动模式可以在功能清单文件AndroidManifest.xml中进行设置,中的launchMode属性。

  相关的代码中也有一些标志可以使用,比如我们想只启用一个实例,则可以使用 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 标志,这个标志表示:如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。


  Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);
  intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
  startActivity(intent);  

  Activity的加载模式受启动Activity的Intent对象中设置的Flag和manifest文件中Activity的元素的特性值交互控制。

  下面是影响加载模式的一些特性

  核心的Intent Flag有:

  FLAG_ACTIVITY_NEW_TASK   FLAG_ACTIVITY_CLEAR_TOP   FLAG_ACTIVITY_RESET_TASK_IF_NEEDED   FLAG_ACTIVITY_SINGLE_TOP

  核心的特性有:

  taskAffinity   launchMode   allowTaskReparenting   clearTaskOnLaunch   alwaysRetainTaskState   finishOnTaskLaunch

  四种加载模式的区别

  所属task的区别

  一般情况下,“standard”和”singleTop”的activity的目标task,和收到的Intent的发送者在同一个task内,就相当于谁调用它,它就跟谁在同一个Task中。

  除非Intent包括参数FLAG_ACTIVITY_NEW_TASK。如果提供了FLAG_ACTIVITY_NEW_TASK参数,会启动到别的task里。

  “singleTask”和”singleInstance” 总是把要启动的activity作为一个task的根元素,他们不会被启动到一个其他task里。

  是否允许多个实例

  “standard”和”singleTop”可以被实例化多次,并且是可以存在于不同的task中;这种实例化时一个task可以包括一个activity的多个实例;

  “singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。

  singleTop 要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不创建新的实例。

  是否允许其它activity存在于本task内

  “singleInstance”独占一个task,其它activity不能存在那个task里;

  如果它启动了一个新的activity,不管新的activity的launch mode 如何,新的activity都将会到别的task里运行(如同加了FLAG_ACTIVITY_NEW_TASK参数)。

  而另外三种模式,则可以和其它activity共存。

  是否每次都生成新实例

  “standard”对于每一个启动Intent都会生成一个activity的新实例;

  “singleTop”的activity如果在task的栈顶的话,则不生成新的该activity的实例,直接使用栈顶的实例,否则,生成该activity的实例。

  比如:

  现在task栈元素为A-B-C-D(D在栈顶),这时候给D发一个启动intent,如果D是 “standard”的,则生成D的一个新实例,栈变为A-B-C-D-D。

  如果D是singleTop的话,则不会生产D的新实例,栈状态仍为A-B-C-D

  如果这时候给B发Intent的话,不管B的launchmode是”standard” 还是 “singleTop” ,都会生成B的新实例,栈状态变为A-B-C-D-B。

  “singleInstance”是其所在栈的唯一activity,它会每次都被重用。

  “singleTask” 如果在栈顶,则接受intent,否则,该intent会被丢弃,但是该task仍会回到前台。 当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法,如果收到intent生成一个activity实例,那么用户可以通过back键回到上一个状态;如果是已经存在的一个activity来处理这个intent的话,用户不能通过按back键返回到这之前的状态。

您可能感兴趣的文章:Android的Activity加载方式实例分析Android编程之四种Activity加载模式分析Android编程四大组件之Activity用法实例分析深入解读Android开发中Activity的生命周期Android编程获取并设置Activity亮度的方法Android编程中activity的完整生命周期实例详解Android编程之Activity中onDestroy()调用分析Android编程实现两个Activity之间共享数据及互相访问的方法Android实现Activity之间通信的方法Android Activity中onStart()和onResume()的区别分析


--结束END--

本文标题: 简单介绍Android开发中的Activity控件的基本概念

本文链接: https://www.lsjlt.com/news/26256.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java的基本概念介绍
    本篇内容介绍了“Java的基本概念介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   Java概述:    目前Java主要应用于中间件...
    99+
    2023-06-03
  • VB.NET通知控件的基本概念
    这篇文章主要介绍“VB.NET通知控件的基本概念”,在日常操作中,相信很多人在VB.NET通知控件的基本概念问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VB.NET通知控件的基本概念”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • 介绍一些关于RAID与SCSI的基本概念
    RAID(冗余阵列磁盘)和SCSI(小型计算机系统接口)是与计算机存储和数据传输相关的基本概念。RAID是一种通过将多个磁盘组合在一...
    99+
    2023-09-08
    RAID
  • 介绍GitLab流程的基本概念和工作原理
    GitLab是一种基于网络的Git存储库管理工具。它支持一系列功能,包括合并请求、问题跟踪、自动构建和持续集成等。在开发团队中,GitLab通常用来管理源代码。本文将介绍GitLab流程的基本概念和工作原理。GitLab流程简介GitLab...
    99+
    2023-10-22
  • Go语言函数的基本概念及用法介绍
    Go语言是一种快速、简洁、安全并且高效的编程语言,近年来在软件开发领域有着日益增长的影响力。在Go语言中,函数是非常重要的概念,它是程序中最基本的组成单元。本文将介绍Go语言函数的基本...
    99+
    2024-03-09
    函数 用法 概念 go语言
  • PHP数组基本概念详细介绍是怎样的
    PHP数组基本概念详细介绍是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数组在我们PHP中是很重要的,如何利用数组实现我们想要的功能,我们这里就来看看关...
    99+
    2023-06-17
  • 让JavaScript开发更加简单的概念有哪些
    这篇文章主要讲解了“让JavaScript开发更加简单的概念有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“让JavaScript开发更加简单的概念有哪...
    99+
    2024-04-02
  • Android中Protobuf的基本使用介绍
    目录前言一、Proto文件示例二、在Android中的使用1、 plugin配置2.、基本调用总结前言 Protobuf,类似于json和xml,是一种序列化结构数据机制,可以用于数...
    99+
    2024-04-02
  • Web开发的基本概念和技术有哪些
    本篇内容介绍了“Web开发的基本概念和技术有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!A — AJ...
    99+
    2024-04-02
  • Flex事件中的基本概念是什么
    这篇文章主要为大家展示了“Flex事件中的基本概念是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Flex事件中的基本概念是什么”这篇文章吧。Flex简介Flex是响应RIA(富客户网络应用...
    99+
    2023-06-17
  • 音视频基本概念和FFmpeg的简单入门教程详解
    目录写在前面基本概念容器/文件(Conainer/File):媒体流(Stream):数据帧/数据包(Frame/Packet):编解码器(Codec):复用(mux):解复用(mu...
    99+
    2024-04-02
  • C++中单调栈的基本性质介绍
    单调栈的定义: 单调栈就是栈内元素单调递增或者单调递减的栈,单调栈只能在栈顶操作。 为了更好的理解单调栈,则可将单调栈用生活情形模拟实现,例如: 我们借用拿号排队的场景来说明下。现在...
    99+
    2024-04-02
  • C#零基础开发中最重要的概念总结
    目录初步数学计算和函数变量和数据类型布尔类型和判断数组和for循环while循环与跳出初步 学习C#自然推荐使用宇宙最强IDE Visual Studio,初学下载社区版,安装过程中...
    99+
    2023-02-26
    C#开发重要概念 C#开发
  • C#零基础开发中最重要的概念是什么
    本篇内容主要讲解“C#零基础开发中最重要的概念是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#零基础开发中最重要的概念是什么”吧!初步学习C#自然推荐使用宇宙最强IDE Visual S...
    99+
    2023-07-05
  • 消息中间件ActiveMQ的简单入门介绍与使用
    目录一、什么是消息中间件二、什么是ActiveMQ三、什么时候需要用ActiveMQ四、如何使用ActiveMQ浅谈MQTT1、什么是MQTT2、如何理解MQTT3、如何使用MQTT...
    99+
    2024-04-02
  • Android开发基础实现最简单的视频播放示例
    目录正篇使用方法最终效果展示总结正篇 视频播放是很平常的一件事情,但如何在APP中实现呢,其实蛮简单的,方法也很多,但作为基础的就是使用VideoView了,下面我们来看看如何使...
    99+
    2023-02-05
    Android开发简单视频播放 Android 视频播放
  • 微信小程序开发中组件的生命周期详细介绍
    目录组件的生命周期自定义组件的生命周期函数执行顺序组件常用的生命周期函数lifetimes节点组件所在页面的生命周期函数pageLifetimes节点组件的生命周期 组件的生命周期,...
    99+
    2024-04-02
  • Java中规模软件开发实训——简单的文本编辑器(代码注释详解)
    ✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(html css js) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:在现代社会中,计算...
    99+
    2023-08-31
    Java实训 Javaswing 项目开发 算法 Java
  • Android开发中使用WebView控件浏览网页的方法详解
    本文实例讲述了Android开发中使用WebView控件浏览网页的方法。分享给大家供大家参考,具体如下:项目中遇到数学展示问题,常规的Textview显示处理不了数学公式,利用图片生成对服务器又产生较大压力,经过查询,可以通过webview...
    99+
    2023-05-30
    android webview roi
  • 【微信小程序 | 实战开发】常用的基础内容组件介绍和使用(2)
    个人名片: 🐼作者简介:一名大二在校生,喜欢编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️ 零基础学Java——小白入门必备 重...
    99+
    2023-09-21
    微信小程序 小程序 ui
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作