文章目录

  • Activity 简介
  • Activity 配置清单
    • 声明activity
    • intent过滤器
    • 声明权限
  • Activity 生命周期
    • onCreate()
    • onStart()
    • onResume()activity可见
    • onPause()activity可见
    • onStop()activity不可见
    • onRestart()
    • onDestroy()

Activity 简介

对于移动应用来说,不一定每次打开项目都是同一个位置,例如你收到一条微信信息,你点开推送,那么打开微信的第一个页面就是聊天页面,而你第一次下载微信,打开的却是登录页面.这就是对于不同的页面就是Activity

Activity 类的目的就是促进这种范式的实现。当一个应用调用另一个应用时,调用方应用会调用另一个应用中的 Activity,而不是整个应用。通过这种方式,Activity 充当了应用与用户互动的入口点。您可以将 Activity 实现为 Activity 类的子类。

大多数应用包含多个屏幕,这意味着它们包含多个 Activity。通常,应用中的一个 Activity 会被指定为主 Activity,这是用户启动应用时出现的第一个屏幕。然后,每个 Activity 可以启动另一个 Activity,以执行不同的操作。例如,一个简单的电子邮件应用中的主 Activity 可能会提供显示电子邮件收件箱的屏幕。主 Activity 可能会从该屏幕启动其他 Activity,以提供执行写邮件和打开邮件这类任务的屏幕。

虽然应用中的各个 Activity 协同工作形成统一的用户体验,但每个 Activity 与其他 Activity 之间只存在松散的关联,应用内不同 Activity 之间的依赖关系通常很小。事实上,Activity 经常会启动属于其他应用的 Activity。例如,浏览器应用可能会启动社交媒体应用的“分享”Activity。

Activity 配置清单

声明activity

因为Activity属于四大组件,所以使用的话必须在清单文件(项目->app->androidmanifest.xml)中注册,标签必须包含在标签中,例如

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.myapplication"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><uses-permission android:name="com.test" /></manifest>

其中Activity中的标签可包含如下

<activity android:allowEmbedded=["true" | "false"]android:allowTaskReparenting=["true" | "false"]android:alwaysRetainTaskState=["true" | "false"]android:autoRemoveFromRecents=["true" | "false"]android:banner="drawable resource"android:clearTaskOnLaunch=["true" | "false"]android:colorMode=[ "hdr" | "wideColorGamut"]android:configChanges=["mcc", "mnc", "locale","touchscreen", "keyboard", "keyboardHidden","navigation", "screenLayout", "fontScale","uiMode", "orientation", "density","screenSize", "smallestScreenSize"]android:directBootAware=["true" | "false"]android:documentLaunchMode=["intoExisting" | "always" |"none" | "never"]android:enabled=["true" | "false"]android:excludeFromRecents=["true" | "false"]android:exported=["true" | "false"]android:finishOnTaskLaunch=["true" | "false"]android:hardwareAccelerated=["true" | "false"]android:icon="drawable resource"android:immersive=["true" | "false"]android:label="string resource"android:launchMode=["standard" | "singleTop" |"singleTask" | "singleInstance"]android:lockTaskMode=["normal" | "never" |"if_whitelisted" | "always"]android:maxRecents="integer"android:maxAspectRatio="float"android:multiprocess=["true" | "false"]android:name="string"android:noHistory=["true" | "false"]  android:parentActivityName="string" android:persistableMode=["persistRootOnly" | "persistAcrossReboots" | "persistNever"]android:permission="string"android:process="string"android:relinquishTaskIdentity=["true" | "false"]android:resizeableActivity=["true" | "false"]android:screenOrientation=["unspecified" | "behind" |"landscape" | "portrait" |"reverseLandscape" | "reversePortrait" |"sensorLandscape" | "sensorPortrait" |"userLandscape" | "userPortrait" |"sensor" | "fullSensor" | "nosensor" |"user" | "fullUser" | "locked"]android:showForAllUsers=["true" | "false"]android:stateNotNeeded=["true" | "false"]android:supportsPictureInPicture=["true" | "false"]android:taskAffinity="string"android:theme="resource or theme"android:uiOptions=["none" | "splitActionBarWhenNarrow"]android:windowSoftInputMode=["stateUnspecified","stateUnchanged", "stateHidden","stateAlwaysHidden", "stateVisible","stateAlwaysVisible", "adjustUnspecified","adjustResize", "adjustPan"] >   . . .
</activity>

intent过滤器

activity不仅可以动态的显示的进行启动,也可以根据intent的规则去匹配启动,例如一个activity在清单文件中的intent的规则是这样的

    <activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"><intent-filter><action android:name="android.intent.action.SEND" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="text/plain" /></intent-filter></activity>

intent-filter:指定 Activity、服务或广播接收器可以响应的 Intent 类型。
action:向 Intent 过滤器添加操作。
category :向 Intent 过滤器添加类别名称。
data:向 Intent 过滤器添加数据规范。

那我不指定他的activity名就可以跳转到这个activity

 Intent sendIntent = new Intent();sendIntent.setAction(Intent.ACTION_SEND);sendIntent.setType("text/plain");sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);// Start the activitystartActivity(sendIntent);
[查询标签含义](https://developer.android.google.cn/guide/topics/manifest/action-element)

声明权限

您可以使用清单的 activity 标记来控制哪些应用可以启动某个 Activity。
例如有一个activity是这样的

    <manifest><activity android:name="...."android:permission=”com.google.socialapp.permission.SHARE_POST”/>

为了能够吊起这个activity,您的APP必须添加上面这个权限

    <manifest><uses-permission android:name="com.google.socialapp.permission.SHARE_POST" /></manifest>

Activity 生命周期

在生命周期回调方法中,您可以声明用户离开和再次进入 Activity 时 Activity 的行为方式。例如,如果您正构建流媒体视频播放器,当用户切换至另一应用时,您可能要暂停视频或终止网络连接。当用户返回时,您可以重新连接网络并允许用户从同一位置继续播放视频。换言之,每个回调都支持您执行适合给定状态变更的特定作业。在合适的时间执行正确的作业,并妥善处理转换,这将提升应用的稳健性和性能。

onCreate()

在该生命周期应该做的事情:

  1. 例如声明界面(在 XML 布局文件中定义)
  2. 定义成员变量
  3. 以及配置某些界面。

您必须实现此回调,它会在系统创建您的 Activity 时触发。您的实现应该初始化 Activity 的基本组件:例如,您的应用应该在此处创建视图并将数据绑定到列表。下一个回调将是 onStart()。

onStart()

onCreate() 退出后,Activity 将进入“已启动”状态,并对用户可见。此回调包含 Activity
进入前台与用户进行互动之前的最后准备工作

onResume()activity可见

系统会在 Activity 开始与用户互动之前调用此回调。此时,该 Activity 位于 Activity 堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在 onResume() 方法中实现的。

onPause()activity可见

当 Activity 失去焦点并进入“已暂停”状态时,系统就会调用 onPause()。例如,当用户点按“返回”或“最近使用的应用”按钮时,就会出现此状态。当系统为您的 Activity 调用 onPause() 时,从技术上来说,这意味着您的 Activity 仍然部分可见,但大多数情况下,这表明用户正在离开该 Activity,该 Activity 很快将进入“已停止”或“已恢复”状态。
如果用户希望界面继续更新,则处于“已暂停”状态的 Activity 也可以继续更新界面。例如,显示导航地图屏幕或播放媒体播放器的 Activity 就属于此类 Activity。即使此类 Activity 失去了焦点,用户仍希望其界面继续更新。
您不应使用 onPause() 来保存应用或用户数据、进行网络调用或执行数据库事务。因为在该方法完成之前,此类工作可能无法完成。有关保存数据的信息,请参阅保存和恢复 Activity 状态。
onPause() 执行完毕后,下一个回调为 onStop()或 onResume(),具体取决于 Activity 进入“已暂停”状态后发生的情况。

onStop()activity不可见

当 Activity 对用户不再可见时,系统会调用 onStop()。出现这种情况的原因可能是 Activity 被销毁,新的 Activity 启动,或者现有的 Activity 正在进入“已恢复”状态并覆盖了已停止的 Activity。在所有这些情况下,停止的 Activity 都将完全不再可见。在这里应用应释放或调整在应用对用户不可见时的无用资源。
当您的 Activity 进入“已停止”状态时,Activity 对象会继续驻留在内存中:该对象将维护所有状态和成员信息,但不会附加到窗口管理器。
系统调用的下一个回调将是 onRestart()(如果 Activity 重新与用户互动)或者 onDestroy()(如果 Activity 彻底终止)。

onRestart()

当处于“已停止”状态的 Activity 即将重启时,系统就会调用此回调。onRestart() 会从 Activity 停止时的状态恢复 Activity。
此回调后面总是跟着 onStart()。

onDestroy()

系统会在销毁 Activity 之前调用此回调。生命周期组件可以在 Activity 被销毁之前清理所需的任何数据。
此回调是 Activity 接收的最后一个回调。通常,实现 onDestroy() 是为了确保在销毁 Activity 或包含该 Activity 的进程时释放该 Activity 的所有资源。

可视化界面:Activity 详解相关推荐

  1. [安卓基础] 009.组件Activity详解

    组件Activity详解 这篇文章学到得内容 1.什么是Activity 2.Activity的生命周期 3.如何保存Activity的状态 4.Activity之间切换时,相互之间生命周期的执行顺序 ...

  2. java程序的界面编程详解

    java程序的界面编程详解 在Java中可以为程序自定义程序界面选择Windows.Unix.Java或Macintosh外观.甚至可以在程序运行时让用户自由的选择外观. UIManager和Swin ...

  3. Echarts数据可视化series-bar柱形图详解,开发全解+完美注释

    全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...

  4. W ndows7怎么进入BlOS,Windows7旗舰版进不了bios界面的详解教程

    最近,一些Win7用户安装了Win7旗舰版之后,发现进入不了bios界面,这个问题该怎么解决呢?有什么方法可以解决这个故障呢?下面,U大侠小编就给大家介绍下Windows7旗舰版进不了bios界面的详 ...

  5. Android9.0 Launcher启动Activity详解(一)

    一.开始 Launcher中点击应用图标启动Activity,其开始方法是 public boolean startActivitySafely(View v, Intent intent, Item ...

  6. Android 之 Activity 详解

    最近在学习Android开发方面的知识,整理了一下关于Android中Activity方面的知识,也算是对自己学的知识进行了总结.Activity 在 Android开发中有着极其重要的位置,Acti ...

  7. python制作界面_详解python做UI界面的方法

    详解python做UI界面的方法 更新时间:2019年02月27日 14:44:34 投稿:laozhang 在本文里我们给大家整理了关于python做UI界面的方法和具体步骤,对此有需要的朋友们可以 ...

  8. 【外行也能看懂的RabbitMQ系列(二)】—— RabbitMQ的Web管理界面(rabbitmq_management)详解(内含Topic模式通配符实操)

    系列文章目录 准备篇 RabbitMQ安装文档 第一章 RabbitMQ快速入门篇 第二章 RabbitMQ的Web管理界面详解 第三章 RabbitMQ进阶篇之死信队列 第四章 RabbitMQ进阶 ...

  9. ECharts 数据各种图自适应 可视化 项目过程详解(附完整代码)

    前言: 本篇文章的学习目的: 1.可视化面板布局适配屏幕 2.利用ECharts 实现柱状图展示 实现的技术栈: 基于 flexible.js +rem 智能大屏适配 VScode cssrem插件 ...

最新文章

  1. 第5章 线性回归算法
  2. 创建面板对象Java,从PNG图像或Java面板创建PDF
  3. 记一次not in 和 minus的优化
  4. WP8.1学习系列(第二十章)——添加控件和处理事件
  5. 神经网络快速搭建之一站式访问
  6. C语言深度解剖读书笔记(1.关键字的秘密)
  7. 深度学习笔记(49) 风格代价函数
  8. Linux系统Bash的常用功能(9)
  9. 微型计算机d3000,13级仪表微机重点教程.doc
  10. mycat1.4.1小白用户入门(一)
  11. 不小心把桌面进程结束了怎么办_本命佛不小心摔碎了怎么办,怎么处理?
  12. 启用 Windows 功能 NetFx3 时出错,错误代码: -2146498529
  13. 复盘:图像饱和度计算公式和图像信噪(PSNR)比计算公式
  14. 08 Python 文件和数据格式化
  15. 路由控制配置network命令解析
  16. android面试题分析总结
  17. iPhone进入到了恢复模式怎么办?
  18. 未明学院:12个惊艳的数据可视化经典案例
  19. 数据仓库 Hive 从入门到小牛(一)
  20. 试算平衡表示例图_案例十一试算平衡表

热门文章

  1. 机械学习:二维空间下支持向量机SVM基础学习
  2. 负数在计算机中如何表示,计算机中负数为什么用补码表示?
  3. MATLAB画曲线图
  4. 基于CC2530的zIgbee传感器无线数据采集系统开发(部分关键源码)
  5. WQ7033开发指南(基础篇)之1.1 初识SDK
  6. import numpy出现ImportError: DLL load failed: 找不到指定的模块的解决方案
  7. 行星齿轮传动电动滚筒设计【设计说明书(论文)+11张CAD图纸】
  8. 最短路径 floyd最小环 洛谷2738 篱笆回路 网上题解
  9. 如何用好 Google 等搜索引擎?
  10. PS和AI安装后报代码为16的错误解决方法