【Android】Activity生命周期研究

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

  • Activity是Android四大组件之一,是Android人必须要深刻理解的基础内容之一。

  • 可以提高我们对相关问题的解决能力。
  • 对一个问题如果不能深入理解,总觉得不踏实。

2. Activity生命周期详解

2.1 Activity生命周期图解

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

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

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

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

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

  • 当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()

真实结果:

果然一致。

3.3 MainActivity到TwoActivity

结果预测:

MainActivity –> onPause()

TwoActivity –> onCreate()

TwoActivity –> onStart()

TwoActivity –> onResume()

MainActivity –> onStop()

真实结果:

和预测顺序一致。

3.4 从TwoActivity返回到MainActivity

结果预测:

TwoAcitvity –> onPause()

MainActivity –> onRestart()

MainActivity –> onStrat()

MainActivity –> onResume()

TwoActivity –> onStop()

TwoActivity –> onDestroy()

真实结果:

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

3.5 从MainActivity返回桌面

结果预测:

MainActivity –> onPause()

MainActivity –> onStop()

MainActivity –> onDestroy()

真实结果:

时间: 2024-10-10 14:53:15

【Android】Activity生命周期研究的相关文章

Android Activity生命周期 onSaveInstanceState和onRestoreInstanceState

当某个activity变得"容易"被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候. 注意上面的双引号,何为"容易"?言下之意就是该activity还没有被销毁,而仅仅是一种可能性.这种可能性有哪些?通过重写一个activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我们可以清

Android Activity 生命周期的透彻理解

说来惭愧,虽然已经做了一年多的android开发,但是最近被人问起activity的生命周期的时候,却感觉自己并不能很自信很确定的回答对方的问题,对activity的生命周期的理解还不透彻啊.     既然发现了问题,那咱就得解决问题,不就个生命周期,能有多复杂. 首先看看android developers 网上的activity的生命周期图:      activity启动的时候:onCreate ---> onStart ---> onResume 这个过程不用多说,大家都知道.这里主要

Android Activity生命周期图解

Android 中 Activity生命周期 从网上摘的 事件回调方法  以下1-4 不可终止 . 1. onCreate()   :Activity 启动后第一个被调用的方法 ,常用来进行Activity的初始化,例如创建View.绑定数据或者恢复信息等 .. (? oncreate 可以恢复什么信息 ) 2. onStart() : 当Activity显示在屏幕上时,该方法被调用 3. onRestart() :当Activity从停止状态进入活动状态前,调用该方法 . 4.onResume

两分钟彻底让你明白Android Activity生命周期(图文)!

首先看一下Android api中所提供的Activity生命周期图(不明白的,可以看完整篇文章,在回头看一下这个图,你会明白的): Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码: 1 public class Activity extends ApplicationContext { 2         protected void onCreate(Bundle savedInstanceState);        3       

android --Activity生命周期具体解释

一. 再探Activity生命周期 为了研究activity的生命周期,简单測试代码例如以下. package com.example.testactivity; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; public class MainActivity extends Activity { private static fi

android --Activity生命周期详解

一. 再探Activity生命周期 为了研究activity的生命周期,简单测试代码如下. package com.example.testactivity; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; public class MainActivity extends Activity { private static fina

Android——Activity生命周期(转)

Activity生命周期 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精髓. 近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下. 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方

Android Activity 生命周期

生命周期流程图: 相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运

Android Activity生命周期

从android api文档摘抄出来的activity生命周期图如下: Activity有如下四种状态 a.活动状态  activity处于屏幕前台,获取到了焦点可以和用户进行交互,同一时刻只有一个activity处于活动状态 b.暂停状态  activity可视但失去焦点(被其它activity部分遮盖或者处于透明activiy下) c.停止状态  activity完全被另外一个activity遮挡,但保留用户状态信息d.非活动状态  activity尚未启动或者已经被手动终止或者由于内存不足