`

Activity

 
阅读更多




 

创建状态:已经从内存中生成了。(oncreate(进) onDestroy(出))

可见状态:如果前台Activity是有一定透明度或不是全屏的,就可以看到了,但不在前台。(onStart(进) onStop(出))

前台状态:在最上层可以直接交互。(onResum(进) onPause(出))

 

Activity正常生命周期情况:

1.A再次可见会执行onRestart();

2.A->B时,如果B是有一定透明度或不是全屏的,A可见,A生命周期只执行onPause不执行onStop。

     (如果A上弹出Dialog时,A的生命周期没有变化)

3.A->B时,如果B不透明且全屏,A生命周期只执行onPause和onStop

4.A->B时,如果B不透明且全屏,A和B的生命周期顺序是A.onPause,B.onCreate B.onStart B.onResume             A.onStop。(在A的 onPause不要执行费时的东西,因为会影响B的显示速度)

 

Activity异常生命周期情况:

Activity异常结束再恢复会多执行另外一对函数onSaveInstanceState onRestoreInstanceState。

---------onstart后--------------------------------------

onRestoreInstanceState是在onStart之后,在onResume之前(只有从异常恢复时才执行)。

onSaveInstanceState在onStop之前,它和onPause没有前后关系。(跳转或者home此函数都会执行)

---------onStop前-------------------------------------

1.A不在前台因内存不足被意外回收后,再次回到A时会执行onCreate(savedInstanceState),这时savedInstanceState不等于null(正常状态下savedInstanceState==null),并且还会执行onRestoreInstanceState(savedInstanceState)(正常状态下不会被执行)。

2.当配置改变时会引起当前Activity销毁重建算是Activity异常终止。例如竖横屏切换时。

竖屏-->横屏会重建一次Activity:

       onSaveInstanceState-->onPause()-->onStop()-->onDestroy()--|-->onCreate()--onStart()-->onRestoreInstanceState()-->onResume()i

横屏-->竖屏会重建两次Activity:

      onSaveInstanceState-->onPause()-->onStop()-->onDestroy()--|-->onCreate()--onStart()-->onRestoreInstanceState()-->onResume()-->onSaveInstanceState-->onPause()-->onStop()-->onDestroy()--|-->onCreate()--onStart()-->onRestoreInstanceState()-->onResume()

 

如果不想让某一项配置的变化引起Activity的变化,可以给该Activity的android:configChanges属性赋该项的值,过滤掉此项。过滤掉此项后不会引起Activity重建但会回调activity的onConfigurationChanged方法在在这个方法里可以做其他处理。

这些配置项可以是:

orentation 屏幕方向发生改变

keyboardHidden 键盘可访问性发生改变

screenSize 屏幕大小改变时(方向发生改变会引起该项变化)

locale 本地位置发生改变时。

 

------------------------------------------------------------------------------------------------------------------------

启动模式

 

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。 

 

1、标准模式(standard):ABC->ABCC 每次激活Activity时都会创建Activity,并放入任务栈中,永远不会调用onNewIntent()。  

例如A启动A,A再接着启动A,A继续启动A,然后再分别出栈

 

2、栈顶复用模式(singleTop):ABC->ABC如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,并调用其onNewIntent(),否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例,而不会调用onNewIntent(),此时就跟standard模式一样)。

 

3、栈内复用模式(singleTask):ABCDF->ABC如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中(此时不会调用onNewIntent())。

 

4、单例复用模式:AB->AB: C  在一个新栈中创建该Activity实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。 

 

       一个应用的Activity供多种方式调用启动的情况,多个调用希望只有一个Activity的实例存在,这就需要Activity的onNewIntent(Intent intent)方法了。只要在Activity中加入自己的onNewIntent(intent)的实现加上Manifest中对Activity设置lanuchMode=“singleTask”就可以。 

 

       onNewIntent()非常好用,Activity第一次启动的时候执行onCreate()---->onStart()---->onResume()等后续生命周期函数,也就时说第一次启动Activity并不会执行到onNewIntent(). 而后面如果再有想启动Activity的时候,那就是执行onNewIntent()---->onResart()------>onStart()----->onResume().  如果android系统由于内存不足把已存在Activity释放掉了,那么再次调用的时候会重新启动Activity即执行onCreate()---->onStart()---->onResume()等。

 

      当调用到onNewIntent(intent)的时候,需要在onNewIntent() 中使用setIntent(intent)赋值给Activity的Intent.否则,后续的getIntent()都是得到老的Intent。 

 

 

任务栈:保存Activity的顺序的栈,具有相同TaskAffinity(任务密切关系)属性Acivity会在同一个任务栈里。同一个应用里的所有Activity默认有相同的TaskAffinity,在同一个任务栈里。如果Activity的allowTaskReparenting(允许任务重定父级)属性为真且属于应用B时,A应用启动了该Activity在A的任务栈里,如果这时启动B应用,该Activity会回到B应用的任务栈里。

 

 

-----------------------------------------------------------------------------------------------------

Intent

intentFilter匹配规则:

如果一个Activity接受隐式调用,intentfilter中action必须有,category是必须有且这个android.intent.category.DEFAULT必须有,data不是是必须的。”,

 

action过滤规则:intent只有一个action,Intentfilter可以有多个要与其中一个action相同(action相同是指action字符串相同),则匹配,否则不匹配。(如果要匹配,intentfilter中有action,intent必须要有action)

 

category过滤规则:intent可以增加category,intent所有的category必须在Intentfilter中找到对应(category相同是指category字符串相同)。否则不匹配。(intent可以不手动设置category,intent中默认有一个android.intent.category.DEFAULT,Actiivity如果接受隐式调用intentfilter必须有android.intent.category.DEFAULT)

 

data过滤规则:intent只能设置一个data,和Intentfilter中其中一个data匹配(data匹配是指目标data中所用字段源中都有且相同),则匹配,否则不匹配。(如果要匹配,intentfilter中有data,则intent必须设置data)

data结构:

   <data

        android:scheme="d"

        android:host="d"

        android:port="90"

 

        android:path="/dd/dd"

        android:pathPattern="//d"  //路径模式

        android:pathPrefix="/dd"  //路径前缀

 

        android:mimeType="image/*"/> 

data有两部分组成uri和mimeType

<scheme>://<host>:<port>/[<pathPrefix>|<path>|<pathPattern>]

scheme:uri的模式,比如HTTP file等。scheme必须有。

host:uri主机名

port:端口号

path 是全路径,如:http://example.com/blog/abc.html,这里将 path 设置为 /blog/abc.html 才能够进行匹配;

pathPatter也是路径只是里面的字符串是正则表达式。

 

pathPrefix 用来匹配路径的开头部分,拿上面的 Uri 来说,这里将 pathPrefix 设置为 /blog 就能进行匹配了;

 

mimeType:媒体类型,例如 image/jpeg、video/*

 

setType 调用后设置 mimeType,然后将 data 置为 null;

setData 调用后设置 data,然后将 mimeType 置为 null;

setDataAndType 调用后才会同时设置 data 与 mimeType。

 

intent 的 

resolveActivity如果没有匹配的activity返回null

packageManager的

resolveActivity如果没有匹配的activity返回null

queryIntentActivities返回匹配的所有Activity信息

 

intent的flag:

flag有些事系统使用的,不需要用户。

还有些其他的flag

有些flag是启动activit,给intent设置flag启动activity。

FLAG_ACTIVITY_SINGLE_TOP

达到activity栈顶复用。

 

FLAG_ACTIVITY_NEW_TASK

FLAG_ACTIVITY_CLEAR_TOP

一般一起使用达到activity的栈内复用

 

  • 大小: 107.2 KB
分享到:
评论

相关推荐

    MATLAB实现基于LSTM-AdaBoost长短期记忆网络结合AdaBoost时间序列预测(含模型描述及示例代码)

    内容概要:本文档详细介绍了基于 MATLAB 实现的 LSTM-AdaBoost 时间序列预测模型,涵盖项目背景、目标、挑战、特点、应用领域以及模型架构和代码示例。随着大数据和AI的发展,时间序列预测变得至关重要。传统方法如 ARIMA 在复杂非线性序列中表现欠佳,因此引入了 LSTM 来捕捉长期依赖性。但 LSTM 存在易陷局部最优、对噪声鲁棒性差的问题,故加入 AdaBoost 提高模型准确性和鲁棒性。两者结合能更好应对非线性和长期依赖的数据,提供更稳定的预测。项目还展示了如何在 MATLAB 中具体实现模型的各个环节。 适用人群:对时间序列预测感兴趣的开发者、研究人员及学生,特别是有一定 MATLAB 编程经验和熟悉深度学习或机器学习基础知识的人群。 使用场景及目标:①适用于金融市场价格预测、气象预报、工业生产故障检测等多种需要时间序列分析的场合;②帮助使用者理解并掌握将LSTM与AdaBoost结合的实现细节及其在提高预测精度和抗噪方面的优势。 其他说明:尽管该模型有诸多优点,但仍存在训练时间长、计算成本高等挑战。文中提及通过优化数据预处理、调整超参数等方式改进性能。同时给出了完整的MATLAB代码实现,便于学习与复现。

    palkert_3ck_01_0918.pdf

    palkert_3ck_01_0918

    pepeljugoski_01_1106.pdf

    pepeljugoski_01_1106

    tatah_01_1107.pdf

    tatah_01_1107

    [AB PLC例程源码][MMS_046393]Motor Speed Reference.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    基于51的步进电机控制系统20250302

    题目:基于单片机的步进电机控制系统 模块: 主控:AT89C52RC 步进电机(ULN2003驱动) 按键(3个) 蓝牙(虚拟终端模拟) 功能: 1、可以通过蓝牙远程控制步进电机转动 2、可以通过按键实现手动与自动控制模式切换。 3、自动模式下,步进电机正转一圈,反转一圈,循环 4、手动模式下可以通过按键控制步进电机转动(顺时针和逆时针)

    [AB PLC例程源码][MMS_041234]Logix Fault Handler.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042348]Using an Ultra3000 as an Indexer on DeviceNet with a CompactLogix.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    智慧校园平台建设全流程详解:从需求到持续优化

    内容概要:本文详细介绍了建设智慧校园平台所需的六个关键步骤。首先通过需求分析深入了解并确定校方和使用者的具体需求;其次是规划设计阶段,依据所得需求制定全面的建设方案。再者是对现有系统的整合——系统集成,确保新旧平台之间的互操作性和数据一致性。培训支持帮助全校教职工和学生快速熟悉新平台,提高效率。实施试点确保系统逐步稳定部署。最后,强调持续改进的重要性,以适应技术和环境变化。通过这一系列有序的工作,可以使智慧校园建设更为科学高效,减少失败风险。 适用人群:教育领域的决策者和技术人员,包括负责信息化建设和运维的团队成员。 使用场景及目标:用于指导高校和其他各级各类学校规划和发展自身的数字校园生态链;目的是建立更加便捷高效的现代化管理模式和服务机制。 其他说明:智慧校园不仅仅是简单的IT设施升级或软件安装,它涉及到全校范围内的流程再造和创新改革。

    AI淘金实战手册:100+高收益变现案例解析

    该文档系统梳理了人工智能技术在商业场景中的落地路径,聚焦内容生产、电商运营、智能客服、数据分析等12个高潜力领域,提炼出100个可操作性变现模型。内容涵盖AI工具开发、API服务收费、垂直场景解决方案、数据增值服务等多元商业模式,每个思路均配备应用场景拆解、技术实现路径及收益测算框架。重点呈现低代码工具应用、现有平台流量复用、细分领域自动化改造三类轻量化启动方案,为创业者提供从技术选型到盈利闭环的全流程参考。

    palkert_3ck_02_0719.pdf

    palkert_3ck_02_0719

    2006-2023年 地级市-克鲁格曼专业化指数.zip

    克鲁格曼专业化指数,最初是由Krugman于1991年提出,用于反映地区间产业结构的差异,也被用来衡量两个地区间的专业化水平,因而又称地区间专业化指数。该指数的计算公式及其含义可以因应用背景和具体需求的不同而有所调整,但核心都是衡量地区间的产业结构差异或专业化程度。 指标 年份、城市、第一产业人数(first_industry1)、第二产业人数(second_industry1)、第三产业人数(third_industry1)、专业化指数(ksi)。

    [AB PLC例程源码][MMS_046305]R2FX.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    精品推荐-通信技术LTE干货资料合集(19份).zip

    精品推荐,通信技术LTE干货资料合集,19份。 LTE PCI网络规划工具.xlsx LTE-S1切换占比专题优化分析报告.docx LTE_TDD问题定位指导书-吞吐量篇.docx LTE三大常见指标优化指导书.xlsx LTE互操作邻区配置核查原则.docx LTE信令流程详解指导书.docx LTE切换问题定位指导一(定位思路和问题现象).docx LTE劣化小区优化指导手册.docx LTE容量优化高负荷小区优化指导书.docx LTE小区搜索过程学习.docx LTE小区级与邻区级切换参数说明.docx LTE差小区处理思路和步骤.docx LTE干扰日常分析介绍.docx LTE异频同频切换.docx LTE弱覆盖问题分析与优化.docx LTE网优电话面试问题-应答技巧.docx LTE网络切换优化.docx LTE高负荷小区容量优化指导书.docx LTE高铁优化之多频组网优化提升“用户感知,网络价值”.docx

    matlab程序代码项目案例:matlab程序代码项目案例matlab中Toolbox中带有的模型预测工具箱.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    pepeljugoski_01_0508.pdf

    pepeljugoski_01_0508

    szczepanek_01_0308.pdf

    szczepanek_01_0308

    oif2007.384.01_IEEE.pdf

    oif2007.384.01_IEEE

    stone_3ck_01_0119.pdf

    stone_3ck_01_0119

    oganessyan_01_1107.pdf

    oganessyan_01_1107

Global site tag (gtag.js) - Google Analytics