我有言在先,今天这个是猜测篇,没有经过证实,有一定可能是我的瞎猜= =,明天等我证实玩会做出相应的修改,把真相呈现出来= =

很多时候真的很想偷懒,但是没办法,虽然今天看了一下午lol季后赛的比赛,晚上还是要做些事情的= =,不然今天总感觉缺点什么。

不知道大家平时看书的时候,特别是看教科书的时候,有没有这样一种感觉,为什么总感觉写书的人说了半天,说的都是一些废话?

的确,为了让没有概念的人理解一件事情,真的需要很多额外的说明,这可能是因为作者的描述能力还有一定的提升空间,也有可能是需要把事情讲复杂,只能通过这样的方式来执行。

就拿《Android开发艺术探索》P.4所提出的一个问题来说:

onStart和onResume,onPause和onStop看似完全一样,他们两个到底有什么实质上的不同呢?

书中所描述的标准答案是这样的,为了避免我使用自己的话来描述而产生的歧义,这里我特地直接引用书本中的相关说明:

先说第一个问题,从实际使用过程中来说,onStart和onResume,onPause和onStop看起来的确差不多,甚至我们可以只保留其中一对,比如只保留onStart和onStop。既然如此,那为什么Android系统还要提供看起来重复的接口呢?根据上面的分析,我们知道,这两个配对的回调分别表示不同的意义,onStart和onStop是从Activity是否可见这个角度来回调的,而onResume和onPause是从Activity是否位于前台这个角度来回调的,而onResume和onPause是从Activity是否位于前台这个角度来回调的,除了这种区别,在实际使用中没有其他明显区别。

是不是觉得一脸蒙蔽的感觉,是不是有种这些字我都看得懂,但是我好像什么都看不懂的感觉?感觉明明说了半天,说的都是人话,但是自己却听不懂人话的感觉对吗?

ok,我尝试说说人话,如果错了,欢迎大神指导。

之前已经说了,这两个回调的作用描述基本完全一样,那么为什么要如此睿智地特地设计两个接口呢?

这两个接口的不同之处其实并不在描述中体现,而是体现在其他地方,时机和频率。

尝试胡说八道一下,按照我的认知,如果新的Activity并没有完全覆盖前一个Activity,那么就仅仅会调用前一个Activity的onPause方法而并不会调用onStop,因为按照我的直觉来看,作为号称极为聪明的谷歌设计人员,并不会不考虑以下情况:

我在对新的界面进行操作时,希望前一个被遮挡一部分的界面还能适当地根据要求刷新界面,如果说应对更新界面数据之类的。所以就需要一个中间的状态,对一个Activity来说,此时虽然我并不是出于最上方的视图了,但是能不能假装我还是显示在用户面前,能正常刷新界面,这就是所谓在onStart之后,Activity已经被视作可见,但是是否是位于前台的作为视图肉眼可见,这就不知道了。

那么知道了这个有什么用呢?仅仅是知道了一个新的概念这么简单吗?或者说是按照前面说的:

这两个玩意看起来的确差不多,甚至我们可以只保留其中一对如onStart和onStop。

这样的做法是否可取呢?我并没有继续往下看,我只想谈谈我的理解,明天找个机会测试一下我的想法到底对不对。

其实对于大多数问题都往往可以用同一个答案来回答,而且基本没错:

看情况!

手机资源是不是很宝贵的,但是在ActivityThread的ActivityRecord栈中的Activity除非执行onDestroy方法(或者其他原因退出让其从栈中弹出),不然基本就一直存在于内存中,所以适当释放一些内存其实还是有一定的道理的= =。这又是什么意思呢?如果我打开一个新的界面,这个时候原来的Activity虽然不位于前台了,但是依然还是认为处于Activity可视状态的对吧,如果我在原来这个Activity中添加一个逻辑,不断地请求网络数据,并刷新界面,是不是意味着这个完全没有意义的非前台界面刷新逻辑还在一直持续,所以这个时候,应该果断地在onPause中断开刷新界面逻辑。

注:以上的说法仅仅是我今天为了凑数,瞎猜的结果,明天我会写个demo验证一下,看看能不能准确而无误地打到自己的脸,真的期待啊= =,话说明天还要加班赶项目= =

开发日记-20190511 关键词 onStart()和onResume()存在的原因(猜测篇)相关推荐

  1. 关键词 onStart()和onResume()存在的原因(测验篇)两者的区别

    还记得前段时间去看漫威的复仇者联盟四,仍记得空间上听说有人把好友中剧透狗直接处以删除好友操作了,很有勇气. 不走篇了,昨天不是瞎扯了半天,提了一个猜测吗,说真的,我自己都忘得差不多了= =,今天还是先 ...

  2. 开发日记-20190417 关键词 代码之间耦合度的一刀两断 (思路篇)

    就目前而言,就我的理解,为什么要设计结构清晰的代码呢,因为结构清晰的代码往往耦合度很低,那为什么要降低代码之间的耦合度呢,当然是因为程序员是一种喜爱偷懒和害怕犯无意义错误的一种生物,那么该怎么办呢,无 ...

  3. 开发日记-20190513 关键词 汇编语言(六)

    其实,每次当我写一篇开发日记,并且这篇开发日记并没有关键词,或者我并没有和你扯东扯西的情况下... 这意味着我这天偷懒了= = ;AddTwo.asm --两个32位整数相加.386.model fl ...

  4. 开发日记-20190328 关键词 利用eolinker一键快速生成API接口文档

    今天感觉效率真的很低= =各个层面的,apk发布到现场发现出现了问题,所以一个下午都在忙着解决现场出现的问题,领导一直打电话询问进度,午觉也没有睡所以今天预计的很多计划都处于停滞状态,像昨天规划的今天 ...

  5. 开发日记-20190516 关键词 MVVM-代码浏览结束

    今天生病了呢=+=.其实今天预计将所有的MVVM都做完的,但是就结果而言,并没有想象中来的简单.嘛嘛嘛,不过基本的想法也已经掌握了,感觉Kotlin真的挺不错的,不过仅仅是作为一门开发语言而言.但是作 ...

  6. 开发日记-20190425 关键词 gradle基础学习 7年之约 启动篇

    以前,面试过一家外企,面试我的技术主管真的很友善,完全是以一种技术交流的态度和我进行交流.说真的,那时候,我一度以为我已经大半只脚踏入了这家企业的大门,他们的hr和我说,我们一个星期内将会给你答复.但 ...

  7. 开发日记-20190423 关键词 模块化完整方案实现 blog读后感

    20190423-开发日记 关键词 模块化完整方案实现 blog读后感 参考并感谢: Android 模块化完整方案实现 https://blog.csdn.net/yalinfendou/artic ...

  8. 开发日记-201909024 关键词 linux基础

    这两个月出差,8点下班,所以需要在这个点之前,把日记写好,事情一多,其实就没有多少时间归纳了. 所以就以转载为主,不过这些转载内容都是我个人阅读完的内容,还是很有信心的. 用linux制作iso镜像文 ...

  9. 开发日记-20190822 关键词 读书笔记《Unix环境高级编程(第二版)》《掌控习惯》DAY 2

    Preface 话说,昨天开始尝试着去改变自己,从基础的习惯开始,11:30准时睡觉,平时差不多12:30才睡觉.按理说,比平时早了一个小时睡觉吧,然后我就把闹钟提前了45分钟,想着还能比平常多睡15 ...

最新文章

  1. http请求过程简要
  2. Java泛型中的子类型化
  3. elasticsearch 6.x (五) 单一文档 API 介绍和使用 update和delete API
  4. 天哪,flash cs4可以使动态文本旋转了
  5. 栈Stack的相关操作(java)
  6. Golang 生成钱包地址
  7. 三极管共射放大电路静态工作点怎么设计
  8. 常用工具及常用解决方案
  9. dom影像图形成数字地形图_DOM卫星影像
  10. 无人机视觉检测算法研究及数据集汇总
  11. CRC32 Hash PK Murmur Hash
  12. 将一个32bit的数据,颠倒过来,bit0与bit31交换,bit1与bit30交换,C语言实现与verilog实现。
  13. eclipse 换背景图片
  14. 世纪金文oracle,21世纪双语新闻(MP3+字幕):一片甲骨天下惊,甲骨文的意义何在?...
  15. Java Email
  16. 判断推理——翻译推理
  17. 什么是服务器托管及和虚拟主机的区别
  18. Java 消息服务(Java Message Service
  19. 单片机与PC机一样都是计算机,单片机与pc机什么区别
  20. 完爆面试官!2021年我们程序员该如何进阶和规划?面经解析

热门文章

  1. Ngnix负载均衡安装及配置
  2. vb 变量赋值为当前选定单元格_VBA变量5年踩坑吐血精华总结
  3. mysql 取绝对值_自学MySQL第六天
  4. cppcheck编译安装命令
  5. 动手写 framebuffer 画点、划线程序 (七)
  6. Linux系统ssh无法启动,Linux系统上SSH无法启动
  7. java虚拟机改装_java虚拟机线上配置
  8. 关于python变量使用_Python 基础知识关于变量的定义使用
  9. 密码错误时alert弹出_密码重置用户流程4部曲
  10. datename mysql_sql DATENAME 用法