zoukankan      html  css  js  c++  java
  • Android 生命周期初探

    Android初学者大概都会学习到组件生命周期的知识,onCreate()->onstart()->onResume()->onPause()->onStop()->onDestroy() 的流程都已熟悉。最近在项目中碰到一个难解决的bug,最后发现原来跟组件生命周期有一定的关系,在此做一点分享。

    单个Activity的生命周期,毫无疑问是按照上面的顺序来的,但是从一个Activity跳转到另一个Activity的过程中呢?是不是第一个Activity先走完onPause()->onStop->onDestroy()->  ,然后第二个Activity再走onCreate()->onStart()->onResume() ?

    这应该属于正常思维,在昨天以前,我也一直以为生命周期是这样走的。可是小小实现一下,发现和预想中的有些差别。

    代码很简单,在各个周期函数中打上log即可,就不贴出了。第一个Activity称为first,第二个Activity称为second。在first中添加一个按钮,点击后通过Intent跳转到second。打出log发现,从first跳转到second的流程如下:

    -->first.onPause()
    -->second.onCreate()
    -->second.onStart()
    -->second.onResume()
    -->first.onStop()

    也就是说第一个界面在执行完onPause()后,第二个界面就开始走onCreate()直到onResume()了,然后第一个界面继续走接下来的onStop()。如果是跳转后finish()掉第一个界面,还会往下走onDestroy();

    在second点击back按钮,走的流程如下:
    -->second.onPause()
    -->first.onRestart()
    -->first.onStart()
    -->first.onResume()
    -->second.onStop()
    -->second.onDestroy()

    同第一次跳转基本类似。

    由以上的实验可知,当Activity进行跳转时,两个Activity的生命流程并不是按照直线顺序进行的,而是中间有一部分交错。头一个Activity走完onPause()后,第二个Activity就会走完它的生命周期,接着第一个Activity继续走onStop(),onDestroy()。

    因此,在项目中应该注意在数据处理时考虑到生命周期的这一特性,避免造成错误。
  • 相关阅读:
    当程序员的那些狗日日子
    程序员常犯的几个错误
    我没有帮你的义务,却有拒绝你的权力
    并发 并行 同步 异步 多线程的区别
    cookie的存取
    sqlserver 处理百万级以上的数据处理与优化
    为什么 jmeter 分布式测试,一定要设置 java.rmi.server.hostname
    详细解析 nginx uri 如何匹配 location 规则
    mysql innodb 从 ibd 文件恢复表数据
    mysql 从 frm 文件恢复 table 表结构的3种方法
  • 原文地址:https://www.cnblogs.com/xutao1988/p/2391243.html
Copyright © 2011-2022 走看看