开博了

2020年,出生以来最特殊,最难忘的一年。因为今年没有回家。疫情来了。以后看博客也能想起这段时间吧。

工作也因为疫情受了些影响,准备一下、沉淀一下。最近时间看了好久的源码,有些理解了,有些也只是浅尝辄止。最初的想法是回顾下常见的面试题,因为3年了,一直参与的国外的项目,都是对接google等国外软件第三方。本想准备下,但看到面试题,很多经常用到的东西却无法很准确的给出答案,其实就是理解不深了,使用次数多也不代表就对它熟悉了,3年前准备面试的时候也没见过问什么activity启动流程啥的,找了些文章去看,有的真的写的很。。很什么呢?就跟疫情期间有些地方的领导视察似的,我都怀疑博主是否知道自己在说什么。。有的写的可以,但其实后面读源码之时也觉得有不对的地方。所以硬下头皮自己看源码吧。当然,并不是在说别人写的问题,别人可能不读就在写,也可能懂了都是没描绘清楚,也可能是自己读的不清楚。总之不如自己理解的记录下来清楚。

在android领域,我这次开博属于"onRestart"不属于"onCreate"。没错,这次主要记录的就是android activity相关的内容,因为实在怕忘记了,所以想起来这里记录一下,本来画了一本子的东西。两个目的:一是这里方便排版,方便随时查阅。二是开源,同时自己的解读一定存在误区的,希望有人可以提出疑问一起研究,或者有人可以直接纠正这些错误。

先抛出一些问题:有些东西可以知其然,但不知其所然。

相信大部分人都知道activity生命周期onCreate onStart...但为啥它生命周期就会这样?

act1启动a2,如果a2是dialog或者透明的,生命周期是什么?是的,a1不会onStop,如果a2再启动一个正常的a3,那么a1,a2都会到onStop。如果a2finish,a1会只执行onResuem。这些都仔细想想根据官网的生命周期的图应该都能明白。但是我特么又尝试了一下act1设置为singleTask。act1启动dialog样式的a2。然后a2启动a1。大家能猜到结果是什么吗?a1会触发onResume,onPause,onResume..你没看错,当然我没有更多的测试机,我手机是华为8.0的一款。触发了两次onResume。我也相信有些人有习惯在onResume中做一些事情,也有人有习惯在onStart中做一些事情。上述的结果表明,a1可能不会触发onStart。a1也有可能触发两次onResume。。然后读源码时参考的是网上的启动流程,那真是为了讲启动流程就直接奔着启动去的,源码中有各种判断条件,就都直接奔着哪个条件是去startAct的,他们的最终流程都去了act的启动。。我也就参考着跟着读了第一遍源码:(。。然后我就像 桌面点击一个app是怎么处理的。如果app没打开就直接去manifest.xml定义的启动页了。如果app处于启动状态呢?然后我搜索了启动第三方的各种方式,有一种方式能达到这个效果,然后源码中是怎么处理才会达到这个效果呢?下面附上一个图,都见过了肯定

还有一张图我找不到了,但是它大体就是描述怎么理解onPause,onStop,onStart,onResume的,最早看文章就是解释说,把他们各自看成一对,那个图的理解方式是,activity有几个状态,running,not fouceable,invisiable,状态改变时发生对应生命周期,上面的a1启动dialog a2的时候就是a1只是从fouceable变得not fouceable了,但它依然是visiable。所以不会触发onStop。但这些都是  知其然,开发中有些东西知其然就可以了。但已经开始读源码了,就想趁热了解的更多。

除了activity生命周期,还有view相关的比如绘制流程和touch事件流程,在这里也有个问题,平时可能不注意的问题。大家验证一些生命周期或者调用流程的时候习惯在super之前调用log()还是习惯在super之后调用log(),还是都调用?如果用错了,还真是想知其然都做不到,甚至会认为已经知其然了,其实不然。。生命周期的还好一点,我没发现有穿插的地方。像touch、draw这种带dispatch的,如果打印为了查看它们触发的时间顺序等等,log的位置不对就会被误导了,后面的文章会再详细解释,当然流程清楚了的话,心中自动触发log。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值