Android四大件之Activity

生命周期

活动状态

  1. 运行状态
    栈顶且可见 此时Activity可以和用户交互,有焦点,strongly recommend 不回收此状态下活动
  2. 暂停状态
    非栈顶且可见 虽然可见但是已经不可交互,无法获取焦点,例如弹窗下面的界面,虽然可见但是点了没反应。同样strongly recommend 不回收此状态下活动
  3. 停止状态
    即不再栈顶而且不可见 此时Activity已经完全不可见,但是系统仍会保存该Activity的信息。当内存不足时可能被系统回收
  4. 销毁状态
    出栈 被回收

共有7个callback,关联到生命周期的每一个环节

what is callback func?
callback is just a name to describe a method that’s supplied as an argument to another method, such that when the parent method is called

Method描述
onCreate()Activity首次创建时调用,并初始化可见控件
onStart()对用户可见
onResume()Activity进入运行状态,可于用户交互
onPause()失去焦点,仅部分可见,进入暂停状态
onStop()Act完全不可见
onDestroy()将在Act被系统回收前调用
onRestart()在Act从停止状态回到运行前调用

在这里插入图片描述

Activity恢复

当Act变为完全不可见时,很可能被系统回收,再次打开后重启生命周期,从onCreate()开始,但是之前留存在Act中的数据丢失了,就需要用户充填,影响用户体验。
为了解决这一问题,使用onSaveInstanceState()保存被回收Act中的信息,该方法保证在Act被回收前一定被调用

When exactly are onSaveInstanceState() and onRestoreInstanceState() called?
Prior to Honeycomb, activities were not considered killable until after they had been paused, meaning that onSaveInstanceState() was called immediately before onPause(). Beginning with Honeycomb, however, Activities are considered to be killable only after they have been stopped, meaning that onSaveInstanceState() will now be called before onStop() instead of immediately before onPause().
在Honeycomb之前,Act直到进入暂停状态才被认为时可kill的,这意味着onSaveInstanceState()onPause()执行前调用;
从Honeycomb开始,Act进入停止状态才认为是可kill的,因此onSaveInstanceState()将在onStop()而不是onPause()前调用

onSaveInstanceState()可能调用的时刻:

  1. 锁屏
  2. 点击home
  3. 其他App进入前台
  4. 屏幕方向改变
  5. 点及back(用户主动销毁)

onSaveInstanceState()将Act的信息保存在Bundle中,重新启动时传入onCreate(Bundle savedInstancesState),重构Act。
onSaveInstanceState()仅适合于保存瞬态数据,而不应持有持久化数据(出门左转数据库)


不同场景下对Activity生命周期的影响

  1. 横竖屏切
    参考链接:android-----横竖屏切换对Activity生命周期的影响
    设置Activity的android:configChanges属性为orientation或者orientation|keyboardHidden或者不设置这个属性
    在这里插入图片描述
    设置Activity的android:configChanges属性为orientation|screenSize或者orientation|screenSize|keyboardHidden
    在这里插入图片描述
    或者直接设置参数禁止切屏,一劳永逸,从根源解决问题

  2. 按下back
    在这里插入图片描述

  3. 按下home
    在这里插入图片描述


Activity间数据传递

  1. Intent
    // code
  2. Bundle
    将信息直接/序列化写入Bundle,再通过Intent传递
  3. startActivityForResult
    // code
  4. Application

Activity启动模式

  1. standard
    系统并不在乎栈中是否已经有该Act实例,每次启动都是新建一个实例
    这样每次打开一个页面都会向栈中新增一个Act,当用户退出时,只有把栈中所有的Act都清除才能退出,用户体验差
  2. singleTop
    如果栈顶就是要新建的Act实例,则直接使用,不再新建;如果栈顶不是,则并不在乎栈中是否已经有该Act实例:新建
    适合于接收 通知启动的内容显示页面
  3. singleTask
    系统每次启动前首先检查栈中是否有该Act实例,如果有该实例,则直接使用,并把该实例之上的所有Act弹出;没有新建
    适用于做App的首页
  4. singleInstance
    单独启用栈管理该Act实例,后续的请求均不会创建新的Activity实例,整个App公用这个单例

关于栈;
应用通过栈管理Act,一个App默认一个栈,如果需要多个栈则需要手动指定

图源见水印
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机科班生通常需要学习以下四个核心领域,也被称为"四大": 1. 计算机组成原理(Computer Architecture):学习计算机硬的基本组成和工作原理,包括中央处理器(CPU)、存储器、输入输出设备等。了解计算机内部的运行机制,包括指令执行、存储器层次结构、总线和I/O管理等。 2. 操作系统(Operating System):学习操作系统的概念、功能和原理。掌握操作系统的管理和调度进程、内存管理、文系统、设备管理等基本知识。了解操作系统如何提供对硬资源的抽象和管理,以及如何协调多个应用程序的执行。 3. 数据结构与算法(Data Structures and Algorithms):学习各种基本的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、查找、图算法等)。掌握数据结构和算法的设计思想和实现方法,培养解决问题的能力和编程技巧。 4. 数据库系统(Database Systems):学习数据库的基本概念、结构和操作。了解关系型数据库和非关系型数据库的特点和应用场景。掌握SQL语言的基本使用和数据库设计、优化的基本原则,以及数据库管理系统的原理和技术。 除了这些核心领域,计算机科班生还会学习其他重要的课程,如编程语言、网络通信、软工程、人工智能等,根据个人兴趣和专业方向的不同,还可以选择深入研究相关的领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值