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

Android五大组件-Activity

Activity生命周期这是Androidapi中所提供的Activity生命周期图,此外Activity还有四种状态:-running:Activity处于栈顶,接收输入事

Activity生命周期

Activity生命周期图
这是Android api中所提供的Activity生命周期图,此外Activity还有四种状态:
- running:Activity处于栈顶,接收输入事件
- paused:Activity失去焦点(即Activity不处于栈顶但可见,不接收事件)。一种情况是其被非全屏的Activity占据(eg:Dialog弹框)再或者被透明的Activity占据。正常此时Activity所有成员变量,内存状态都还在(除非内存紧张)
- stoped:Activity完全被覆盖。正常此时Activity所有成员变量,内存状态都还在(除非内存紧张)
- killed:被系统回收掉,此时Activity所有成员变量,内存状态都不存在了
下面是Activity几个生命周期的几个关键方法
- onCreate():此时Activity尚不可见,根据setContentView读取根视图之后…
- onStart():此时Activity可见但还不能接收输入事件
- onResume():此时Activity可见且可接收输入事件
下面是Activity的几个常见场景的生命周期流转:
- 点击Home键:running->onPause->onStop
- 回到Activity:stoped->onRestart->onStart->onResume
- 退出Activity:running->onPause->onStop->onDestroy
- 横竖屏切换:(正常情况下,Activity会被销毁并重新创建)running->onPause->onStop->onDestroy->onCreate->onStart->onResume
- 锁屏、解锁屏:(正常情况下)锁屏onPause->onStop 解锁屏onRestart->onStart->onResume

横竖屏相关参数:

  • android:screenOrientation:
    “unspecified”:默认值 由系统来判断显示方向.判定的策略是和设备相关的,所以不同的设备会有不同的显示方向.
    “landscape”:横屏显示(宽比高要长)
    “portrait”:竖屏显示(高比宽要长)
    “user”:用户当前首选的方向
    “behind”:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的)
    “sensor”:有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。
    “nosensor”:忽略物理感应器,这样就不会随着用户旋转设备而更改了
  • android:cOnfigChanges=”orientation|screenSize”。设置该属性横竖屏切换时Activity不会销毁重建,会调用onConfigurationChanged让我们可以做布局切换等工作

Activity启动模式

  • standard:每次启动Activity都会创建Activity实例
  • singletop:当启动的Activity与栈顶Acitivity相同则不会创建新的Activity实例
  • singletask:当Activity栈中有相同的Activity,则将Activity之上的其他Activity出栈使其位于栈顶
  • singleinstance:独立一个Activity任务栈

Activity任务栈

正常情况下,一个应用只有一个进程,而一个进程只有一个Activity栈

Activity(杂)

  • onSaveInstanceState/onRestoreInstanceState:Activity很有可能被系统销毁的时候调用,用户点击back键或者主动销毁不调用。可以存储和恢复相关数据
  • 隐式启动:隐式启动会根据条件匹配所有合适的对象以供选择
    隐式启动需要在AndroidManifet.xml中设置Activity接收的intent-filter条件;然后startActivity的Intent中设置查找筛选条件

<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.DIAL"/>
<data android:scheme="tel"/>
<category android:name="android.intent.category.DEFAULT"/>
intent-filter>
activity>
//筛选条件
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

配置Acitivity的intent-fliter
intent-fliter有三种属性(action、data、category);action表示意图,查找的时候需要要有一个action匹配即可;category表示动作类别,需要全部匹配方可;data表示与动作要操纵的数据,匹配一组即可。

其中data有一下四种类型:

  • android:scheme 用于指定数据的协议部分,如上例中的http部分
  • android:host 用于指定数据的主机名部分,如www.baidu.com部分
  • android:port 用于指定主机名和端口之后的部分,一般紧随在主机名之后
  • android:mimeType 用于指定可以处理的数据类型,允许使用通配符的方式进行指定

Activity启动过程

这里假设从Launcher启动一个全新的App,整个启动过程主要关系到三个进程:Launcher,AMS,新启动的App进程
下面是一个简化的过程
Activity启动过程简述
下面是一个较为详细的过程图(从system_server启动Launcher画起)
这里写图片描述
附上原文件(用亿图打开)

  • 当此Activity的实例已经存在,并且此时的启动模式为SingleTask和SingleInstance,另外当这个实例位于栈顶且启动模式为SingleTop时也会触发onNewInstent(),而不触发onCreate

推荐阅读
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 多线程基础概览
    本文探讨了多线程的起源及其在现代编程中的重要性。线程的引入是为了增强进程的稳定性,确保一个进程的崩溃不会影响其他进程。而进程的存在则是为了保障操作系统的稳定运行,防止单一应用程序的错误导致整个系统的崩溃。线程作为进程的逻辑单元,多个线程共享同一CPU,需要合理调度以避免资源竞争。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 深入解析Android GPS机制:第五部分 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
author-avatar
小宇宇宙2502862273
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有