Activity相关知识总结

作者 : 开心源码 本文共1402个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共108人阅读

异常情况下的生命周期

情况一:资源相关的系统配置发生改变导致Activity被销毁并重建

比较典型的就是横竖屏的切换后者分辨率的变化,默认情况下系统会将Activity销毁并重建。此时系统会调用onSaveInstanceState方法保存Activity的状态(判断的标准是系统认为Activity呗销毁后,会立刻被重建),onSaveInstanceState的调用发生在onStop之前,与onPause的调用没有固定的先后顺序。Activity被重建时,系统会调用onRestoreInstanceState方法,它的调用发生在onStart之后,与onResume没有固定的先后顺序。在Activity被重建时,可以选择在onRestoreInstanceState或者onCreate方法中实现,唯一的区别是,假如onRestoreInstanceState被调用那参数中的bundle对象肯定不会null。

在异常情况下,系统销毁Activity时,会默认保存少量视图状态,比方LIstVIew的滚动位置,EditText输入的内容和聚焦状态。这是由于View也有onSaveInstanceState和onRestoreInstanceState方法。当Activity被销毁时,首先触发其onSaveInstanceState方法,而后Activity会委托(或者者叫分发任务)它的wIndow对象保存相关数据,触发其onSaveInstanceState方法,继而window对象会委托它所包含的View层级,逐层触发各个view的onSaveInstanceState方法,这样就就保存状态的任务,分发到了Activity的视图所包含的所有View对象。

情况二 内存不足导致系统需要销毁低优先级的Activity

Activity根据优先级的高低,可以分为三种:

(1)前端Activity——处于onResume状态,正在与客户交互

(2)可见Activity——处于onPause状态,客户可见,但是不能交互。比方从Activity触发弹出对话框,此时Activity即为可见状态,但是不可交互。

(3)后端Activity——处于onStop的状态,Activity不可见,已经暂停。

系统内存资源不足时,会按照优先级去杀掉目标Activity所在的进程,并在后续通过onSaveInstanceState和onRestoreInstanceState方法来存储和恢复数据。

系统配置项里有很多内容,假如某个内容项发生变化时,我们不希望Activity被系统重建,可以给Activity在manifest配置中指定configChanges属性。当Activity指定了configChanges属性后,相应的系统配置项发生变化时,Activity将不会被销毁,onSaveInstanceState和onRestoreInstanceState方法也不会被调用,取而代之的是,系统会调用Activity的onConfigurationChanged方法。

Activity启动模式


task和back stack

task是一组Activity的集合,back stack是task的数据结构实现。task是可以跨应用,跨进程的。

taskAffinity

allowTaskReparenting

FLAGS

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Activity相关知识总结

发表回复