Android中从一个Activity跳转到另一个Activity经历的生命周期?

最近在看android的书,引起了一些启发和回忆起以前的面试经历,那是我进入第一家公司的面试官问我的问题,虽然我回答错了,但是依然被录取了,非常高兴,也非常荣幸。后来又对这个知识点进行了学习。现在看了书,再一次对比起来,发现有新的理解。

例子:这里先列举2个Activity分别为:ActivityA和ActivityB,我们要点击ActivityA的启动ActivityB按钮,来启动ActivityB,然后点击返回键。


1、期间经历了哪些生命周期?

先看ActivityA和ActivityB的代码:
ActivityA.java

public class ActivityA extends Activity {
    private ActivityA _this;
    private String TAG=ActivityA.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e(TAG,"onCreate");
        setContentView(R.layout.activity_a);
        _this=this;
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG,"onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG,"onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG,"onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG,"onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG,"onDestroy");
    }

    public void startActivityB(View v){
        Intent intent=new Intent(_this,ActivityB.class);
        startActivity(intent);
    }
}

activity_a.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="startActivityB"
        android:text="启动ActivityB"
        />

</LinearLayout>

ActivityB.java的代码

public class ActivityB extends Activity {
    private ActivityB _this;
    private String TAG=ActivityB.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e(TAG,"onCreate");
        setContentView(R.layout.activity_a);
        _this=this;
    }


    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG,"onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG,"onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG,"onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG,"onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG,"onDestroy");
    }

    public void startActivityB(View v){
        Intent intent=new Intent(_this,ActivityB.class);
        startActivity(intent);
    }
}

好了,重点来了。

  • (1)我先启动了ActivityA,生命周期

这里写图片描述

  • (2)然后点击ActivityA的跳转按钮
    这里写图片描述
  • (3)点击ActivityB的返回按钮。
    这里写图片描述

注意看我圈出来的地方,ActivityA先onPause了,ActivityB执行了onCreate,当ActivityB的onResume执行了,ActivityA才stop,这个是不是和我们经常看的activity的生命周期是一样的。
这里写图片描述
对,就是一样的。到这里第一个问题已经回答了。

2、新启发,关于onStart和onResume、onPause和onStop的实质不同点?

还是看上图我画圈的地方,因为在activity中onStart和onStop是从Activity是否可见的角度来说的,而onResume和onPause是从Activity是否位于前台的角度来说的。
是否可见和是否位于前台区别想必大家可想而知了。
可见并不代表已经显示在用户眼前了。(这一句才是最该理解的)
这也是我们经常在onResume中做一些显示之前的数据刷新的工作了。
好了,就到这里,谢谢大家花耐心看完。

猜你喜欢

转载自blog.csdn.net/u012489412/article/details/53745110