从生命周期带你看android

本文详细解析了Android中Activity的生命周期,在正常及异常情况下的行为特点,包括横竖屏切换、系统资源不足等情况,并提供了如何避免异常情况导致应用崩溃的解决方案。
两种情况下的activity 的生命周期
    1 正常情况下就是 oncreate onstart onresume onpause onstop ondestory,其中onstart 跟onstop 对应,onresume跟onpause对应,oncreate 跟ondestory对应,这里没什么好说的,注意一点就是当由A  activity 跳转到B activity 中的时候,是A activity 的onpuase 先执行 还是B actiity 的onresume 先执行的问题。(这里自己可以测试一下)  这里直接说结论:是A activity 的onpause 先执行,然后B activity 的onResume 执行。
  下面看android 官方文档有这么一段话:在onpause 中不能做重量级的操作,通过测试我们知道,只有当前一个activity 的打开另一个acitivity 是,生命周期执行的顺序为,前一个activity的onPause ,后activity 的oncreate,后activity onstart  onresume,前一个acitivity 的onstop ,从中不难看出原因就是,为了使后activity 尽快的显示到屏幕上,我们不要再onpause 中做耗时操作,当然如果非要做耗时操作的话也建议的onstop 中,因为这是后acitivity 已经展示到了屏幕上面了。
    
    2 异常情况下的acivity 生命周期
        1 横竖屏切换
        先说activity 异常情况,异常包括那些情况呢?最常见的就是横竖屏切换,我们知道当横竖屏切换时候会导致activity 销毁 并且重新建立。我们注意到有些情况下,当一个activity 由于转屏销毁后,重新建立的activity 的testView 等控件 跟销毁之前的acitivity 内容,相同。其实 我们注意到在activity 中oncreate 方法回掉了一个bundle 类型的参数,其实在acivity 异常情况下,会多执行一个生命周期方法 onSaveInstanceState,(它的调用时机不固定,有兴趣可以测试一下,可能在onpause 之前也可能不是) 从名字就可以看出,他的作用就是在activity 生命周期异常情况下保存状态,当activity 在恢复从新建时候,又通过onRestory 方法来重新取出 bundle 中的数据 重新回显出来。正式由于系统在再onsaveinstance  跟onrestoreinstance 方法中 默认做了一些处理,所以我们能看到前面说的那些效果。 这里要补充说的是onrestore 调用时机在onstart 之后,其实oncreate 中bundle 跟这里bundle 是一样的,我们可以选择在任意方法处理恢复数据。
    那数据有是怎么保存的呢,这里根据源码,有兴趣的可以去查看,子类的view 其实先调用父容器的saveinstancestate,去保存数据。然后逐级向上,请求父容器去保存状态,知道顶层decorView ,然后顶层decorview 不会保存数据,他又通知子容器去保存数据,可能这里对初学人来说比较绕,但是熟悉androi 朋友一看就明白在androi 中这样的典型的委托思想随处可见,比如view 测量  事件分发都是这种思路,看多了就熟悉了。
   2 系统资源不足时
    acitivity 被系统收回,就必须说一下 activity 的优先级了,
    大致分为3种
     1  前提acitivity 指正在与前台交互的activity 优先级最高
       2  非前台但是可见的activity  比如弹出一个对话框,但是没有跟用户交互
       3 后天acitity  被暂停了的activity 执行了onstop 的activity
    不知大家开发中有没有遇到,当我们调用系统相机拍照,返回时出现crash 情况,特别是用一些比较老的手机,内存小手机时候,而且也不一定每次都出现carsh ,其实这个时候就是,由于我们调用相机的时候,需要占用系统过多的资源。特别是小内存的手机,系统资源不足就回收了 不可见的activity 然后我们返回时候就出现crash 情况,针对这种情况我会后续写一篇文章 分享一下处理办法,这里不在过多描述。
 我们知道当系统配置变化时候就使activity 自动重新创建,有什么方法可以不让activity 重新创建,这样我们就不用担心由于activity 重新创建而引起的carsh 问题了。答案当然是肯定的。 这时我们可以给acitvity 配置configChanges 属性
    configChange 属性很多(大家可以自行问度娘)但是开发中 一般常用的 locale (系统的本地文字变化) keybpardHidden (键盘变化)  orientation 手机旋转屏幕。 配置了这些 activity 没有重建,onsaveinstance  onRestoreInstance 也没有重建。但是 我们发现onConfiggurationChanged 方法调用了, 这里我们就可以自行处理了。

另外除了使用bundle 保存 acitvity 信息的还,我们也可以使用fragment 来保存一些信息,特别是信息比较大的时候。后面有时间,我们会继续说说这个方法。
MATLAB主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性内容概要:本文主要介绍了一种在MATLAB环境下实现的主动噪声和振动控制算法,该算法针对较大的次级路径变化具有较强的鲁棒性。文中详细阐述了算法的设计原理与实现方法,重点解决了传统控制系统中因次级路径动态变化导致性能下降的问题。通过引入自适应机制和鲁棒控制策略,提升了系统在复杂环境下的稳定性和控制精度,适用于需要高精度噪声与振动抑制的实际工程场景。此外,文档还列举了多个MATLAB仿真实例及相关科研技术服务内容,涵盖信号处理、智能优化、机器学习等多个交叉领域。; 适合人群:具备一定MATLAB编程基础和控制系统理论知识的科研人员及工程技术人员,尤其适合从事噪声与振动控制、信号处理、自动化等相关领域的研究生和工程师。; 使用场景及目标:①应用于汽车、航空航天、精密仪器等对噪声和振动敏感的工业领域;②用于提升现有主动控制系统对参数变化的适应能力;③为相关科研项目提供算法验证与仿真平台支持; 阅读建议:建议读者结合提供的MATLAB代码进行仿真实验,深入理解算法在不同次级路径条件下的响应特性,并可通过调整控制参数进一步探究其鲁棒性边界。同时可参考文档中列出的相关技术案例拓展应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值