本文内容来自《Android开发艺术探索》第一章,个人学习提炼总结,欢迎指正。

1.1典型情况下的生命周期

  • onCreate():表示Activity正在被创建,初始化布局资源+Activity所需要数据等。
  • onStart():表示Activity正在启动,Activity已经可见,但是未出现在前台(正在显示),不可与用户交互。
  • onResume():表示Activity获得焦点,已经可见,并在前台开始活动。

手动分割线

  • onPause():表示Activity正在停止,正常情况下调用onStop,若快速返回到当前Activity,则先执行完onPause,再调用onResume。
  • onStop():表示Activity即将停止,可做稍微重量级回收工作,如取消网络连接、注销广播接收器。
  • onDestory():表示Activity即将销毁,回收工作+资源释放。
  • onRestart():表示Activity正在重启,此时Activity从后台到前台,由不可见到可见。

onStart()和onResume()、onPause()和onStop()的区别:

  • onStart与onStop是从Activity是否可见这个角度调用的。
  • onResume和onPause是从Activity是否显示在前台这个角度来回调的。
  • 在实际使用没其他明显区别。

生命周期的切换过程:

用-连接的表示在用一个Activity中进行。

(1)启动新Activity:onCreate-onStart-onResume。

(2)打开新Activity/切换到桌面:旧onPause,新onCreate-onStart-onResume,旧onStop。

  • (↑若新Activity采用透明主题,那么当前Activity不会回调onStop)
  • (↑android:theme=”@android:style/Theme.Translucent”)

(3)回到原来Activity:当前Activity的onPause,原Activity的onRestart-onStart-onResume,当前Activity的onStop-onDestory。

(4)用户按下back键回退:onPause-onStop-onDestory。

(5)Activity1上弹出对话框Activity2:1的onPause,2的onCreate-onStart-onResume。【与(2)对应比较】

(6)关闭对话框Activity2,显示Activity1:2的onPause(),1的onResume(),2的onStop()-onDestroy()。【与(3)对应比较】

异常情况下生命周期分析

(1)系统资源配置发生改变导致Activity被杀死并重新创建

  • 系统会调用onSaveInstanceState保存数据,调用onPause,onStop,onDestory销毁Activity,onSaveInstanceState会在onStop前调用,不一定在onPause的前面或后面调用。
  • 创建新Activity后用onRestoreInstanceState恢复数据,onRestoreInstanceState中的onCreate的参数是onSaveInstanceState方法保存的Bundle对象。
  • (可真长呢这句话...简单点说新Activity的参数是旧Activity传递来的对象)

(2)资源内存不足导致低优先级的Activity被杀死

  • 一个进程如果没有四大组件在执行很快会被系统杀死,因此后台工作不适宜脱离四大组件独自运行在后台中,解决方法:将后台工作放入Service中从而保证进程有一定优先级,不会被轻易杀死。
  • (果然四大组件才是老大,那会被艰难的杀死吗???)

1.2Activity的启动模式

1.2.1设置Activity启动模式的方法

(1)在AndroidManifest.xml中给对应的Activity设定属性

ndroid:launchMode="standard|singleInstance|single Task|singleTop"。

(2)通过标记位设定,方法是intent.addFlags(Intent.xxx)。

1.2.2Activity的四种LaunchMode

(1)standard:标准模式、默认模式

  • 每次启动一个Activity就会创建一个新的实例。
  • 注意:使用ApplicationContext去启动standard模式Activity就会报错。因为standard模式的Activity会默认进入启动它所属的任务栈,但是由于非Activity的Context没有所谓的任务栈。

(2)singleTop:栈顶复用模式

  • 如果新Activity已经位于任务栈的栈顶,就不会重新创建,并回调onNewIntent(intent)方法。

(3)singleTask:栈内复用模式

  • 只要该Activity在一个任务栈中存在,都不会重新创建,并回调onNewIntent(intent)方法。如果不存在,系统会先寻找是否存在需要的栈,如果不存在该栈,就创建一个任务栈,并把该Activity放进去;如果存在,就会创建到已经存在的栈中。

(4)singleInstance:单实例模式

  • 具有此模式的Activity只能单独位于一个任务栈中,且此任务栈中只有唯一一个实例。

标识Activity任务栈名称的属性:android:taskAffinity,默认为应用包名。

1.2.3常用的可设定Activity启动模式的标记位

FLAG_ACTIVITY_SINGLE_TOP:对应singleTop启动模式。
FLAG_ACTIVITY_NEW_TASK :对应singleTask模式。

1.3IntentFilter匹配规则

1.3.1匹配原则

(1)一个intent只有同时匹配某个Activity的intent-filter中的action、category、data才算完全匹配,才能启动该Activity。
(2)一个Activity可以有多个 intent-filter,一个 intent只要成功匹配任意一组 intent-filter,就可以启动该Activity。

1.3.2匹配规则

(1)action匹配规则:

  • 要求intent中的action 存在且必须和intent-filter中的其中一个 action相同。
  • 区分大小写。

(2)category匹配规则:

  • intent中的category可以不存在,这是因为此时系统给该Activity 默认加上了< category android:name="android.intent.category.DEAFAULT" />属性值。
  • 除上述情况外,有其他category,则要求intent中的category和intent-filter中的所有category 相同。

(3)data匹配规则:

  • 如果intent-filter中有定义data,那么Intent中也必须也要定义date。
  • data主要由mimeType(媒体类型)和URI组成。在匹配时通过intent.setDataAndType(Uri data, String type)方法对date进行设置。

Android开发艺术探索之Activity篇总结相关推荐

  1. 《Android开发艺术探索》完结篇

    笔记链接: <Android开发艺术探索>之Activity的生命周期和启动模式(一) <Android开发艺术探索>之IPC机制上(二) <Android开发艺术探索& ...

  2. Android开发艺术探索一 Activity

    一:生命周期: 典型情况:onCreate - onRestart - onStart - onResume - onPause - onStop - onDestory 1.按back键:onPau ...

  3. 《Android开发艺术探索》

    序 昨晚准备参考一下 <Android 开发艺术探索>这本书写一个博客 ,但是在家里找了好长时间也找不见 .所以就找了网上的文章 .这本书强烈推荐大家好好读几遍 . <Android ...

  4. Android开发艺术探索笔记

    <Android开发艺术探索>这本书在几年前就已经买了,陆陆续续看过几次,都没有看完,没有理解透. 最近重读<Android开发艺术探索>,读了两次,第一次读完感觉还有大量的知 ...

  5. Activity的初级,中级,高级问法,android开发艺术探索电子

    Intent implicitIntent = new Intent(); implicitIntent.setAction("com.test.image"); implicit ...

  6. Android开发艺术探索完结篇——天道酬勤

    这片文章发布,代表着我已经把本书和看完并且笔记也发布完成了,回忆了一下我看Android群英传,只用了两个月,但是看本书却花了2016年05月04日 - 2018年07月16日,整整两年多,真是惭愧 ...

  7. Android开发艺术探索笔记(一) Activity的生命周期和启动模式(1)

    Activity作为Android开发中最常用的一个组件,是Android开发人员必须熟悉且掌握的重要内容.同时Activity也是在面试中经常被问到的一个方向.因此,掌握Activity的重要性也不 ...

  8. Android开发艺术探索读书笔记(一)

    首先向各位严重推荐主席这本书<Android开发艺术探索>. 再感谢主席邀请写这篇读书笔记 + 书评.书已经完整的翻完一遍了,但是还没有细致的品读并run代码,最近有时间正好系统的把整本书 ...

  9. Android开发艺术探索——新的征程,程序人生路漫漫!

    Android开发艺术探索--新的征程,程序人生路漫漫! 偶尔写点东西分享,但是我还是比较喜欢写笔记,看书,群英传看完了,是学到了点东西,开始看这本更加深入Android的书籍了,不知道适不适合自己, ...

最新文章

  1. 虚拟搭建局域网模拟器_接上U盘就能构建虚拟局域网!蒲公英X5路由器使用体验分享...
  2. php环境搭建5.6_WIN8.1下搭建PHP5.6环境
  3. python label位置_Python3 tkinter基础 Label pack 设置控件在窗体中的位置
  4. 160 - 6 aLoNg3x.1
  5. php中now()的用法,PHP中的NOW()函数
  6. 第二个冲刺期的第四天
  7. php 图片填充图片,php imagefilledrectangle在图片画一矩形并填充
  8. 小米平板2刷哪个系统更流畅_你想用什么系统的小米平板2,Win10还是MIUI7?
  9. 那些在一个公司死磕了5-10年的人,最后都怎么样了?
  10. 企业文档管理难题,云盒子来解决!
  11. C++中继承 —— 继承的概念及定义
  12. 复杂网络实验报告2019210025曾培圣
  13. v-model的实现原理
  14. SpringBoot 配置文件加密的两种方式
  15. golang无穷大的判断
  16. webshell一句话木马大全
  17. 物联卡为什么突然不能用了?物联卡容易封号吗?
  18. 在计算机中 无符号书最常用于表示,2012年9月计算机等考《一级MS Office》全真模拟试卷(19)...
  19. 拥有这款电视机,便可同时拥有4K超高清电视和专业健身私教?我不信!
  20. 编译FCL时报错:/usr/local/lib/libccd.a: 无法添加符号: 错误的值

热门文章

  1. 隐隐约约看到了月全食
  2. 通达信行业、板块与自定义指数等dat文件文件头
  3. 肝素钠提取工艺流程,离子交换树脂在肝素钠提取的应用
  4. 把仙剑奇侠传5的音乐从pkg里请出来变成mp3吧
  5. 智能创新引导工具软件项目简介
  6. WCDMA终端网络搜索过程剖析
  7. 堆排HeapSort
  8. [腾讯面试题]100层楼丢玻璃球问题
  9. 5w1h分析数据异常问题
  10. java基于ssm的幼儿园管理系统