`
coolxing
  • 浏览: 876587 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
9a45b66b-c585-3a35-8680-2e466b75e3f8
Java Concurre...
浏览量:98120
社区版块
存档分类
最新评论

android笔记--task和back stack

阅读更多

[本文的图片来源于google SDK文档]

 

基本概念

task是一系列activity的集合, 这些activity通常因为同一目的而启动, 系统将这些activity按照创建的顺序组织在栈中(也就是所谓的back stack). 每一个task都拥有一个仅属于它的back stack.

例如一个联系人app, 当新建一个联系人时, 需要为这个联系人指定头像. 这时会启动图片浏览器选择一张图片作为头像, 选择完成之后切换回联系人app. 在这个过程中, 至少会启动2activity, 系统会将这2activity安排在同一个task, 给用户的感觉就好像是这2activity是属于同一个app.

home screen是大多数task创建的场所. 当用户点击home screenapp图标时, 通常会新建一个task, 并将该app"main activity"作为back stack中的root元素. 如果当前activity启动了另一个activity, 新的activity会被压入back stack中并获得焦点. 前一个activity仍然在back stack栈中, 但处于stopped状态. 一个处于stopped状态的activity在内存中存有它的状态数据.

如果用户点击back, 当前activity将从back stack中弹出并被系统销毁(调用了onDestroy()方法), 栈中的前一个activity成为新的栈顶元素并获得焦点(它的状态数据不会丢失).

栈中的activity不会有重新排序的机会, back stack只是简单的压入或弹出activity--当前activity启动了新的activity时将新的activity压入栈中, 当用户点击back键时弹出当前的activity, 仅此而已.

如果用户不停的点击back, back stack中的activity将不断从栈中弹出, 直到回到home screen. 当栈中所有的activity都已出栈时, 这个back stacktask将不复存在.

下图是一个简单的示例:       

 

foreground taskbackground task

         Task可以分为foreground taskbackground task. 当用户按下home键时, 当前task就会从foreground task变成background task. 如果一个task变为background task, 那么栈中的所有activity都将处于stopped状态. Task也可以从background task恢复为foreground task, 比如用户在home screen界面中再次点击某个task根元素的activity的图标.下图演示了2task的情形: 如果用户重新点击了activity1的图片, 那么task A将重新成为foreground task, 而且task A中的activity3将恢复为运行状态.

         Background task中的所有activity均处于stopped状态, foreground task中除栈顶activity之外的其他activity也处于stopped状态, 系统可能由于内存不足的缘故摧毁后台activity—这可能导致数据的丢失. 关于如何防止数据丢失, 请参考我的另一篇博文http://coolxing.iteye.com/blog/1279447. 如果一个后台activity被系统摧毁, 其在栈中的位置仍然保留着, 当用户按下back键定位到已被摧毁的activity, 会重建这个activity.

 

Activity的多重实例

         一个activity可能会被多次实例化, 这些activity的实例化对象可能存在与同一个task, 也可能存在于不同的task.

         上图的HomeActivity用于2个实例, 且这2个实例存在于同一个task.

         如果开发者不希望一个activity存在多个实例对象, 可以在androidManifest.xml文件中进行配置, 或者通过IntentFlag属性进行设定.

 

管理taskback stack

         由系统自动管理的taskback stack通常情况下可以很好的工作, 开发者不应该介入. 如果出于某些特殊的考虑需要介入对taskback stack的管理, android也提供了相应的途径:可以为androidManifest.xml文件的<activity>标签设置相应的属性, 也可以给启动activityintent设置flag属性. 如果同时设置了2, 那么将以intentflag属性为准.

 

manifest文件中设置launch mode

<activity>标签的launchMode属性的值可能为:

1. “standard”, launchMode属性的默认值. 表示该activity启动后将压入当前back stack, activity可以存在多重实例, 这些多重实例既可以分布在不同的task, 也可以分布在同一个task.

2. “singleTop”. 表示启动该activity, 如果这个activity已经是当前task的栈顶activity, 那么将不再创建新的activity, 其余情形同”standard”. 例如某个task中包含4activity, 分别为A-B-C-D, activity D处于back stack的栈顶, DlaunchMode属性为”singleTop”. 如果此时再次启动了activity D, 由于activity D已经处于栈顶, 此时不会再次创建activity D的实例, 当前back stack中拥有的activity仍然是A-B-C-D. 但是如果DlaunchMode”standard”, 那么会再次创建新的activity D的实例, 并将其压入栈中, back stack中拥有的activity将变化为A-B-C-D-D.

3. “singleTask”. 表示启动该activity, 如果这个activity尚未在任何task中存在实例, 将新建一个task, 然后把该activity压入这个新的task. 如果在某个task中已经存在一个该activity的实例对象, 将不再创建这个activity, 但是activity所在的task将成为foreground task.

4. “singleInstance”. ”singleTask”类似, 不同的是”singleInstance”activity所在的task不能拥有其他activity.

 

设置intentflag属性

通过startActivity()方法启动一个activity需要一个intent, 设置intentflag属性可以指定待启动的activitylaunchMode. Intentflag属性的可选值有:

1. FLAG_ACTIVITY_NEW_TASK. 对应值为“singleTask”launchMode.

2. FLAG_ACTIVITY_SINGLE_TOP. 对应值为” singleTop”launchMode.

3. FLAG_ACTIVITY_CLEAR_TOP. launchMode中不存在对应的值. 表示如果待启动的activity已经在当前taskback stack, 那么不再创建该activity的实例对象, 并将销毁栈中所有位于该activity之前的activity.

  • 大小: 84 KB
  • 大小: 67.4 KB
  • 大小: 41.5 KB
1
2
分享到:
评论

相关推荐

    Android自学笔记-16-任务栈

    本自学笔记将深入探讨Android的任务栈机制,以帮助开发者更好地理解和利用这一特性来优化用户体验。 一、任务与任务栈 在Android中,一个任务(Task)是一个应用程序执行的上下文,它可以包含多个活动(Activity)...

    Android学习笔记-Activity篇

    这篇学习笔记将深入探讨Activity的相关知识,包括创建、声明、启动、关闭以及生命周期管理,同时还会涉及Task和Back Stack的管理。 一、Activity创建: 在Android应用中,Activity的创建通常始于一个Java类,这个类...

    Android自学笔记-15-Activity的生命周期

    最后,注意Android的Task和Back Stack也是Activity生命周期的重要组成部分。Task是一组按照创建顺序堆叠的Activity,而Back Stack则管理着这些Task的历史记录。用户可以通过返回键按照栈的顺序回退到之前的状态。 ...

    Android Activity学习笔记

    Android Activity学习笔记 Android Activity是Android系统中最基本的组件之一,它负责处理用户交互和显示用户界面。...Activity的生命周期、数据交互、启动模式和Task和BackStack都是Android开发中非常重要的知识点。

    全球变风量(VAV)系统市场研究:年复合增长率(CAGR)为 5.8%

    在全球建筑行业不断追求节能与智能化发展的浪潮中,变风量(VAV)系统市场正展现出蓬勃的发展潜力。根据 QYResearch 报告出版商的深入调研统计,预计到 2031 年,全球变风量(VAV)系统市场销售额将飙升至 1241.3 亿元,在 2025 年至 2031 年期间,年复合增长率(CAGR)为 5.8%。这一令人瞩目的数据,不仅彰显了 VAV 系统在当今建筑领域的重要地位,更预示着其未来广阔的市场前景。​ 变风量系统的起源可追溯到 20 世纪 60 年代的美国。它犹如建筑空调系统中的 “智能管家”,能够敏锐地感知室内负荷或室内所需参数的变化,通过维持恒定的送风温度,自动、精准地调节空调系统的送风量,从而确保室内各项参数始终满足空调系统的严格要求。从系统构成来看,变风量系统主要由四个基本部分协同运作。变风量末端设备,包括 VAV 箱和室温控制器,如同系统的 “神经末梢”,负责接收室内环境变化的信号并做出初步响应;空气处理及输送设备则承担着对空气进行净化、加热、冷却等处理以及高效输送的重任;风管系统,涵盖新风、排风、送风、回风等管道,构建起了空气流通的 “高速公路”;而自动控制系统宛

    《基于YOLOv8的跆拳道训练系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    探究ChatGPT情感化交互对其用户情绪健康的多方法研究

    内容概要:本文探讨了ChatGPT这种高级语音模式的人工智能聊天机器人与用户的互动对其情绪健康的影响。研究采用了两种互补的方法:大规模平台数据分析和随机对照试验(RCT)。平台数据部分通过对超过400万次对话进行隐私保护的大规模自动化分析以及对4000多名用户的调查,揭示了高频率使用者表现出更多的情感依赖和较低的社会交往意愿。RCT部分则通过近1000名参与者为期28天的研究,发现语音模型相较于文本模型能带来更好的情绪健康效果,但长时间使用可能导致负面后果。此外,初始情绪状态较差的用户在使用更具吸引力的语音模型时,情绪有所改善。 适合人群:对人机交互、情感计算和社会心理学感兴趣的科研人员和技术开发者。 使用场景及目标:本研究旨在为AI聊天机器人的设计提供指导,确保它们不仅能满足任务需求,还能促进用户的心理健康。同时,也为政策制定者提供了关于AI伦理使用的思考。 其他说明:研究强调了长期使用AI聊天机器人可能带来的复杂心理效应,特别是对于那些已经感到孤独或社交孤立的人来说,过度依赖可能会加剧这些问题。未来的研究应该更加关注这些极端情况下的用户体验。

    Java反射性能优化:深入探讨setAccessible与MethodHandle的技术差异及应用场景

    Java 反射(Reflection)是一种强大的机制,允许程序在运行时检查和操作类的成员变量和方法。然而,传统的 `setAccessible(true)` 方式虽然便捷,但存在安全性问题,并且性能相对较低。在 Java 7 引入 `MethodHandle` 后,我们可以通过 `MethodHandles.Lookup.findVirtual()` 提供更优雅、高效的方式来访问对象属性。本文将对比这两种反射方式,并分析它们的优缺点。

    loongdomShop.tar.gz

    loongdomShop.tar.gz

    人工智能与人类行为对聊天机器人社会心理效应的纵向随机对照研究

    内容概要:本文探讨了不同交互模式(文本、中性语音、吸引人语音)和对话类型(开放式、非个人化、个人化)对聊天机器人使用者的心理社会效果(如孤独感、社交互动、情感依赖、不当使用)的影响。研究表明,在初期阶段,语音型聊天机器人比文本型更能缓解孤独感并减少情感依赖,但随着每日使用时间增加,这种优势逐渐消失,尤其是对于中性语音聊天机器人。此外,个人话题对话略微增加了孤独感,而非个人话题则导致更高的情感依赖。总体而言,高频率使用聊天机器人的用户表现出更多的孤独感、情感依赖和不当使用,同时减少了真实人际交往。研究还发现,某些个体特征(如依恋倾向、情绪回避)使用户更容易受到负面影响。 适合人群:心理学家、社会学家、人工智能研究人员以及关注心理健康和人机交互的专业人士。 使用场景及目标:①帮助理解不同类型聊天机器人对用户心理健康的潜在影响;②为设计更健康的人工智能系统提供指导;③制定政策和规范,确保聊天机器人的安全和有效使用。 其他说明:研究强调了进一步探索聊天机器人管理情感内容而不引发依赖或替代人际关系的重要性,呼吁更多跨学科的研究来评估长期影响。

    MP4575GF-Z 产品规格书

    MP4575GF-Z MP4575 TSSOP-20 降压型可调DC-DC电源芯片

    界面设计_SwiftUI_习惯养成_项目管理_1742850611.zip

    界面设计_SwiftUI_习惯养成_项目管理_1742850611.zip

    免安装版的logic软件包 支持波形实时查看 内含驱动文件

    免安装版的logic软件包。支持波形实时查看。内含驱动文件。

    基于Springboot+Mysql的学生毕业离校系统(含LW+PPT+源码+系统演示视频+安装说明).zip

    1. **系统名称**:学生毕业离校系统 2. **技术栈**:Java技术、MySQL数据库、Spring Boot框架、B/S架构、Tomcat服务器、Eclipse开发环境 3. **系统功能**: - **管理员功能**:首页、个人中心、学生管理、教师管理、离校信息管理、费用结算管理、论文审核管理、管理员管理、留言板管理、系统管理。 - **学生功能**:首页、个人中心、费用结算管理、论文审核管理、我的收藏管理。 - **教师功能**:首页、个人中心、学生管理、离校信息管理、费用结算管理、论文审核管理。

    WebSocket测试Demo程序

    配套文章:https://blog.csdn.net/gust2013/article/details/139608432

    蓝凌OA系统V15.0管理员手册

    蓝凌OA系统V15.0管理员手册

    《基于YOLOv8的生物样本识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    mips-gcc520-glibc222编译工具链.zip

    mips-gcc520-glibc222编译工具链.zip

    社交网络_React_Native_开发教程_学习资源_1742847416.zip

    app开发

    Swift编程语言的基础特性与应用开发入门教程

    内容概要:本文档详细介绍了Swift编程语言的基础知识,涵盖语言特点、基础语法、集合类型、控制流、函数定义、面向对象编程、可选类型、错误处理、协议与扩展以及内存管理等方面的内容。此外还简要提及了Swift与UIKit/SwiftUI的关系,并提供了进一步学习的资源推荐。通过这份文档,读者可以全面了解Swift的基本概念及其在iOS/macOS/watchOS/tvOS平台的应用开发中的使用方法。 适合人群:初学者或者希望从其他编程语言转向Swift的开发者。 使用场景及目标:帮助读者快速上手Swift编程,掌握其基本语法和特性,能够独立完成简单的程序编写任务,为进一步学习高级主题如并发编程、图形界面设计打下坚实的基础。 阅读建议:由于Swift是一门现代化的语言,拥有许多独特的特性和最佳实践方式,在学习过程中应当多加练习并尝试理解背后的原理。同时利用提供的官方文档和其他辅助材料加深印象。

Global site tag (gtag.js) - Google Analytics