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()。

    因此,在项目中应该注意在数据处理时考虑到生命周期的这一特性,避免造成错误。
  • 相关阅读:
    bzoj 3209: 花神的数论题 数位dp
    bzoj 1799: [Ahoi2009]self 同类分布 数位dp
    Codeforces 755 F. PolandBall and Gifts 多重背包+贪心
    Educational Codeforces Round 17 D. Maximum path DP
    Codeforces Round #396 (Div. 2) C. Mahmoud and a Message DP
    Codeforces 768 E. Game of Stones 博弈DP
    HDU 2457/POJ 3691 DNA repair AC自动机+DP
    Codefoces 791D. Bear and Tree Jumps 树形DP
    Codeforces 440 D. Berland Federalization 树形DP,记录DP
    Codeforces 709E. Centroids 树形DP
  • 原文地址:https://www.cnblogs.com/xutao1988/p/2391243.html
Copyright © 2011-2022 走看看