1.什么是Activity

Activity是一个可以与用户交互的组件,从功能上来说,它作为应用程序的界面框架,负责动态加载各种用户界面视图,实现底层的消息传递等,不能简单地把Activity简单视为一个屏幕,而应把它看作一个功能强大的界面管理者,它负责调度各种界面视图,帮助开发人员完成Android应用与用户之间的UI交互。从逻辑上来说,Activity是Android应用的组成部分,一个Android应用可以包含多个Activity(当然还包含其他类型的组件如Service、Content Provider等)。

Activity的生命周期以及各个生命周期回调特点

  • onCreate(Bundle savedInstanceState):Activity被启动时调用的第一个方法,在这里做一些初始化数据、设置用户界面等工作

  • onStart():该方法在onCreate() 方法之后被调用,或者在Activity从Stopped状态转换为Actived状态时被调用

  • onResume():在Activity从Paused状态转换到Actived状态时被调用。

  • onPaused():**时机:**在Activity从Actived状态转换到Paused状态时被调用。**用法:**可以在这个方法中持久化对象数据,也可以结束比较耗费CPU时间的操作,比如动画之类的。用这个方法写的代码要尽量效率高一些,如果这个方法没有执行完,新的Activity对象将不会显示出来,因为会影响客户的体验性。也就是说,新的Activity对象必须等待onPause()方法执行完毕后再显示出来。
    **经典例子:**若Activity被另一个透明或者Dialog样式的Activity覆盖,尽管对用户它仍然部分或全部可见,但它已经失去了焦点,故不可与用户交互,此时被覆盖的Activity是处于onPause状态。

  • onStop():在Activity从Actived状态转换到Stopped状态时被调用。一般在这里保存Activity的状态信息。Activity被另外一个Activity完全覆盖、失去焦点并不可见

  • onDestroy():在Activity被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源、清理内存等工作。

2.onSaveInstanceState

调用场景:

  • 屏幕旋转
  • 被其他Activity覆盖
  • 按下home键
    onSaveInstanceState()方法并不是每次当Activity离开前台时都会调用的,如果用户使用finish()方法结束了Activity,则不会调用,因为在用户主动退出(如单击返回按钮)的情况下,系统默认为当前的一些状态信息如编辑了一半的短信等是用户已经不需要的,主动放弃的。另外要注意onSaveInstanceState调用在onPause之前。

onRestoreInstanceState:在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到Activity时,此方法会被调用;在用户改变屏幕方向时,重建的过程中,此方法会被调用。我们可以重写此方法,以便恢复一些临时数据。onRestoreInstanceState调用在onStart之后

3.启动模式

  • standard是默认的启动模式,如果不指定launchMode属性,就会自动使用这种启动模式

  • singleTop模式,如果要启动的这个Activity在当前任务中已经存在了,并且还处于栈顶的位置,那么系统就不会再去创建一个该Activity的实例,而是调用栈顶Activity的onNewIntent()方法

  • singleTask这种启动模式表示,系统会创建一个新的任务,并将启动的Activity放入这个新任务的栈底位置。但是,如果现有任务当中已经存在一个该Activity的实例了,那么系统就不会再创建一次它的实例,而是会直接调用onNewIntent()方法

  • singleInstance模式启动Activity会先创建一个新的Task,这种Activity所在的Task中始终只会有一个Activity

4.进程的优先级

1.前台进程

前台进程是显示在屏幕最前端并与用户正在交互的进程,是Android系统中最重要的进程,包含以下4种情况。

  • 进程中的Activity正在与用户进行交互。

  • 进程服务被Activity调用,而且这个Activity正在与用户进行交互。

  • 进程服务正在执行声明周期中的回调方法,如onCreate()、onStart()或onDestroy()

  • 进程的BroadcastReceiver正在执行onReceive()方法。

Android系统在多个前台进程同时运行时,可能会出现资源不足的情况,此时会清除部分前台进程,保证主要的用户界面能够及时响应。

2.可见进程

可见进程指部分程序界面能够被用户看见,却不在前台与用户交互,不响应界面事件(其onPause()方法已被调用)的进程。如果一个进程包含服务,且这个服务正在被用户可见的Activity调用,此进程同样被视为可见进程。

Android系统一般存在少量的可见进程,只有在特殊的情况下,Android系统才会为保证前台进程的资源而清除可见进程。

3.服务进程

服务进程是指包含由startService()方法启动服务的进程。它有以下特性:没有用户界面;在后台长期运行。例如,后台MP3播放器或后台上传下载数据的网络服务。

Android系统除非不能保证前台进程或可见进程所必要的资源,否则不强行清除服务进程。

4.后台进程

后台进程是指不包含任何已经启动的服务,而且没有任何用户可见的Activity的进程。这些进程不直接影响用户的体验。

Android系统中一般存在数量较多的后台进程,因此这些进程会被保存在一个列表中,以保证在系统资源紧张时,系统将优先清除用户较长时间没有见到的后台进程。

5.空进程

空进程是不包含任何活跃组件的进程。一般保留这些进程,是为了将其作为一个缓存,在它所属的应用组件下一次需要时,缩短启动的时间。

空进程在系统资源紧张时会被首先清除,但为了提高Android系统应用程序的启动速度,Android系统会将空进程保存在系统内存中,在用户重新启动该程序时,空进程会被重新使用。

5.Activity的启动流程

详见Activity启动流程详解

6.Activity间的通信方式

  • EventBus
  • Intent
  • 广播
  • 外部存储(sp 文件 database)
  • 全局变量

Android面试闯关——Activity(持续更新中)相关推荐

  1. Android面试知识点指南(持续更新)

    Java: 一. 集合框架,list,map,set都有哪些具体的实现类,区别都是什么? 1.List,Set都是继承自Collection接口,Map则不是; 2.List特点:元素有放入顺序,元素 ...

  2. Android笔试题大全(持续更新中),移动应用开发就业

    2. 下列哪些语句关于内存回收的说明是正确的? ( B ) A.程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的 ...

  3. web前端面试常考问题——持续更新中(5.20)

    1.介绍一下你的技术栈             HTML5 + CSS3 + ES6 + Jquery + React + Webpack + git + npm .... 2.简单自我介绍 3.电商 ...

  4. Android笔试题大全(持续更新中),安卓应用开发项目

    8. Service中如何实现更改Activity界面元素 ( B ) A.通过把当前activity对象传递给service对象 B.通过向Activity发送广播 C.通过Context对象更改A ...

  5. java面试知识迷你版--持续更新中

    **部分知识来源JavaGuide等网络学习资源. java基础 内部类:静态内部类.成员内部类.局部内部类.匿名内部类. 重写(override)要求子类的返回值小于父类(类型相同),修饰符使用范围 ...

  6. 史上最全的微服务专业术语面试50问,持续更新中

    说明 Java生鲜电商平台中由于采用了微服务架构进行业务的处理,买家,卖家,配送,销售,供应商等进行服务化,但是不可避免存在分布式事务的问题. 业界有很多的解决方案,对此我相信大家都百度一下子就有很多 ...

  7. 剑指Offer——面试小提示(持续更新中)

    (1)应聘者在电话面试的时候应尽可能用形象的语言把细节说清楚. (2)如果在英语面试时没有听清或没有听懂面试官的问题,应聘者要敢于说Pardon. (3)在共享桌面远程面试中,面试官最关心的是应聘者的 ...

  8. 【机器学习】算法面试知识点整理(持续更新中~)

    1.监督学习(SupervisedLearning):有类别标签的学习,基于训练样本的输入.输出训练得到最优模型,再使用该模型预测新输入的输出: 代表算法:决策树.朴素贝叶斯.逻辑回归.KNN.SVM ...

  9. .net常用面试核心技术点(持续更新中)

    using System; using System.Collections.Generic; using System.Text; /*算法系列*/ namespace ConsoleApplica ...

最新文章

  1. 7款高颜值HTML5播放器:让你的音乐有声有色
  2. c# Parallel.For 并行编程 执行顺序测试
  3. Wiki1017(乘积最大)
  4. 推荐几本书,这些书.Net程序员最好要看
  5. IDC关于使用JBoss Fuse的商业价值的报告(与Apache Camel一起使用)
  6. 关于反射Assembly.Load(程序集).CreateInstance(命名空间.类)
  7. Python operator.lt()函数与示例
  8. html返回顶部_Jquery实现一键返回顶部
  9. UI展示样机素材|让作品看起来毫无痕迹,还原场景!
  10. 微课|中学生可以这样学Python(例6.1):杨辉三角形
  11. 为什么要网页模块化?
  12. 微软的Hyper-V专业级虚拟化工具
  13. Ajax02 什么是json、json语法、json的使用、利用jQuery实现ajax
  14. C语言库函数查找工具MSDN
  15. mencoder_有用的Mplayer / Mencoder命令
  16. 前端面试题(带文字+代码解析),我不相信你看不懂(2022.11.04)
  17. (HDU)1718 -- Rank (段位)
  18. webscarab fuzz testing
  19. 没有什么技术是永恒的,2020 年 VMware 第一个开始裁员了!
  20. 科技爱好者周刊(第 144 期):提高收入的根本途径

热门文章

  1. CUD学习-查看电脑block数量与如何分配给程序
  2. LMDIF_函数源码
  3. python调用c++动态库 linux_linux中使用boost.python调用c++动态库的方法
  4. java reflectionutils_ReflectionUtils工具类-装载
  5. 【趣图】测试刚写完的代码...
  6. [JDK8] Stream
  7. Java中生产者与消费者问题的演变
  8. Git的stash操作
  9. 2016年第31周四
  10. 润乾集算报表提升性能之可控缓存