zoukankan      html  css  js  c++  java
  • 【Android】Activity生命周期研究

    1. 为什么研究Activity什么周期

    • Activity是Android四大组件之一,是Android人必须要深刻理解的基础内容之一。
    • 可以提高我们对相关问题的解决能力。
    • 对一个问题如果不能深入理解,总觉得不踏实。

    2. Activity生命周期详解

    2.1 Activity生命周期图解

    下图是Android开发官网的原图,清晰表达了Activity生命周期中每个方法所处位置及调用流程。

    activity_lifecycle

    上图对Activity的执行流程表达很到位,但是对每个方法在执行时,我们的设备处于一种什么状态,其中注释表达的不是很细致,有待进一步深入研究。

    2.2 Activity生命周期核心方法详解

    下表是Android官网对Activity生命周期中各个方法的详解。

    image

    注:通过上面表格中的信息描述我们不难发现一下几点:

    • 当Activity调用完onResume()方法后Activity就将处于可见状态,可以与用户交互了。
    • onStop()方法是在Activity完全不可见时才调用的。
    • 当调用完onPause()方法后Activity是可以被杀掉的,这也就意味着可能不会调用 onStop()和 onDestroy()。因此,您应该在调用 onPause()向存储设备写入至关重要的持久性数据(例如用户编辑)。
    • 应该对 onPause()调用期间必须保留的信息有所选择,因为该方法中的任何阻止过程都会妨碍向下一个 Activity 的转变并拖慢用户体验。

    3. 通过一个生命周期实例来加深一下印象

    3.1 实例代码

    有两个Activity,MainActivity和TwoActivity,其代码如下,后面将执行几个常见的操作,看看其生命周期流程究竟如何运行。

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            findViewById(R.id.btn_onClick).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(MainActivity.this, TwoActivity.class));
                }
            });
            Log.i("info", "MainActivity --> onCreate()");
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            Log.i("info", "MainActivity --> onStart()");
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            Log.i("info", "MainActivity --> onResume()");
        }
    
        @Override
        protected void onRestart() {
            super.onRestart();
            Log.i("info", "MainActivity --> onRestart()");
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            Log.i("info", "MainActivity --> onPause()");
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            Log.i("info", "MainActivity --> onStop()");
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.i("info", "MainActivity --> onDestroy()");
        }
    }
    public class TwoActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_two_layout);
            Log.i("info", "TwoActivity --> onCreate()");
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            Log.i("info", "TwoActivity --> onStart()");
        }
    
        @Override
        protected void onRestart() {
            super.onRestart();
            Log.i("info", "TwoActivity --> onRestart()");
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            Log.i("info", "TwoActivity --> onResume()");
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            Log.i("info", "TwoActivity --> onPause()");
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            Log.i("info", "TwoActivity --> onStop()");
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.i("info", "TwoActivity --> onDestroy()");
        }
    }

    3.2 启动MainActivity

    结果预测:

    MainActivity --> onCreate()

    MainActivity --> onStart()

    MainActivity --> onResume()

    真实结果:

    image

    果然一致。

    3.3 MainActivity到TwoActivity

    结果预测:

    MainActivity –> onPause()

    TwoActivity –> onCreate()

    TwoActivity –> onStart()

    TwoActivity –> onResume()

    MainActivity –> onStop()

    真实结果:

    image

    和预测顺序一致。

    3.4 从TwoActivity返回到MainActivity

    结果预测:

    TwoAcitvity –> onPause()

    MainActivity –> onRestart()

    MainActivity –> onStrat()

    MainActivity –> onResume()

    TwoActivity –> onStop()

    TwoActivity –> onDestroy()

    真实结果:

    image

    顺序一致,证明理论是正确的。

    3.5 从MainActivity返回桌面

    结果预测:

    MainActivity –> onPause()

    MainActivity –> onStop()

    MainActivity –> onDestroy()

    真实结果:

    image

  • 相关阅读:
    雅虎笔试&面试题
    有道面试
    IBM笔试&面试
    20140916~17华宇笔试&面试
    操作系统知识梳理3-存储管理
    操作系统知识梳理2-哲学家就餐问题
    操作系统知识梳理1-概述及进程管理
    阿里面试总结
    2012-2015网易有道笔试题总结
    PostgresSQL在cmd中使用psql操作数据库
  • 原文地址:https://www.cnblogs.com/shidian/p/7966884.html
Copyright © 2011-2022 走看看