让你更直观了解activity的生命周期

在自学android的过程中我走了蛮多弯路的,在此希望对android感兴趣的小伙伴们少走一些弯路,在此我给大家介绍一下我对activity生命周期的理解.(如有哪里写的不对希望大牛们多指点指点,感激不进)

要想了解activity的生命周期肯定没有官方资料说的详细,但阅读官方资料对一些小伙伴来说坑定是有一些困难的(本人也是如此-.-!),但官方资料的解释还是十分给力的,所以我将围绕官方资料的图来讲解,废话不多说上图.




Activity其实是继承了 ApplicationContext这个类,我们可以重写以下方法,如下代码:
  public   class   Activity   extends   ApplicationContext   {
     
protected   void  onCreate ( Bundle  savedInstanceState );

     
protected   void  onStart ();

     
protected   void  onRestart ();

     
protected   void  onResume ();

     
protected   void  onPause ();

     
protected   void  onStop ();

     
protected   void  onDestroy ();
 
}
  

可能大家不太看得懂上面图的意思,让我们一起来做一个简单的demo来更好的理解该图

第一步:创建一个ActivityDemo的工程

第二步:在MainActivity中重写Activity中的7个方法代码如下:

package com.example.liangchao.activitydemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        System.out.println("_________________A onCreate_________________");


    }



    @Override
    protected void onStart() {
        super.onStart();

        System.out.println("_________________A onStart_________________");
    }

    @Override
    protected void onResume() {
        super.onResume();

        System.out.println("_________________A onResume_________________");
    }

    @Override
    protected void onPause() {
        super.onPause();

        System.out.println("_________________A onPause___________________");
    }

    @Override
    protected void onStop() {
        super.onStop();

        System.out.println("___________________A onStop____________________");
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();

        System.out.println("____________________A onDestroy___________________");
    }

    @Override
    protected void onRestart() {
        super.onRestart();

        System.out.println("____________________A onRestart____________________");
    }
}

第三步:运行demo让我们看一下打印日志

第一次运行demo,程序加载该activity先后执行 onCreate()->onStart()->onResume()三个方法如图:



Back键: 当我们按返回键时,该activity先后执行了onPause->onStop->onDestroy  (此时改activity已经被销毁,如果重新导航到该activity会执行上面第一次加载activity这一步骤,因为demo中就只有一个activity,当它被销毁时程序也就同时结束了)



Home键:当我们按home键是,该activity执行了onPause->onStop  (此时的activity并没有被销毁,系统依旧保留改activity的数据)


所以我们在次启动activity时并没有执行onCreate这个方法,而是执行:onRestart->onStart->onResume三个方法



以上就是单个activity在不同情况是后的什么周期,接下来让我们看看多个activity 通过Intent,start出来的activity直接的什么生命周期吧

第一步:创建一个新的activity

第二步:给MainActivity的xml布局文件加一个跳转新的activity的按钮,并通过Intent和startActivity()来跳转(xml文件就不放了-.-)

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        System.out.println("_________________A onCreate_________________");

        findViewById(R.id.button_newACT).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // new 一个跳转到ActivityTwo
                Intent intent = new Intent(MainActivity.this,ActivityTwo.class);
                startActivity(intent);
            }
        });


    }


第三步:给ActivityTwo跳转MainActivity的按钮

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_two);

    System.out.println("_________________B onCreate_________________");

    findViewById(R.id.button_return).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(ActivityTwo.this,MainActivity.class);
            startActivity(intent);
        }
    });

第四步,让我没来看看运行时的打印日志吧

MainActivity跳转到ActivityTwo:MainActivity(onPause)

                                ActivityTwo(onCreate->onStart->onResume-)
                                MainActivity(onStop)




ActivityTwo"返回"到MainActivity: ActivityTwo (onPause)
                                MainActivity(onCreate->onStart->onResume-)
                                ActivityTwo(onStop)




通过观察上面的打印结果你会发现,通过startActivity()来跳转到新的activity的生命周期是一样,而且以上两个activity都没有执行onDestroy()这个方法,所以当你一直点击跳转按钮和返回按钮,系统就会一直不停的start新的activity,系统的运行内存就不会不停的叠加所以这肯定是不行的,这时我们就需要通过finish()这个方法来对跳转的activity进行销毁,这才是最稳妥.
修改过后的代码:
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);

        System.out.println("_________________B onCreate_________________");

        findViewById(R.id.button_return).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                Intent intent = new Intent(ActivityTwo.this,MainActivity.class);
//                startActivity(intent);
                finish();
            }
        });

让我们来看看修改后ActivityTwo放回MainActivity的运行结果: ActivityTwo(onPause)
                                MainActivity(onCreate->onStart->onResume-)
                                ActivityTwo(onStop->onDestroy)



OK,这下就完美了,不知道上面的两个示例有没有帮助到大家更好的理解activity的生命周期呢,要是帮助了你请大家给个赞,在此多谢大家的支持了,可能有的地方写的还有些不好,也希望大家多指点和交流.





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值