Activity生命周期实例讲解

时间:2022-02-21 07:36:02

 activity中有7个与生命周期有关的函数。其中oncreated()是activity第一次被启动时执行的,主要是初始化一些变量,onrestart()是当前activity重新被启动时调用的;绑定一些监听器等;onstart()是activity界面被显示出来的时候执行的;onresume()是当该activity与用户能进行交互时被执行;onpause()是另一个activity被启动,当前的activity就被暂停了,一般在该函数中执行保存当前的数据;onstop()表示另一个activity被启动完成时,当前activity对用户同时又完全不可见时才调用的;ondestroy()是退出当前activity时调用的,当然如果程序中调用finish()或者说android系统当前资源不够用时就会被调用。
当用多个activity在执行时,这时候android系统会自动将这些activity压入栈中并且总是显示最顶的那个activity,这个栈在android叫做task,但是这个栈只支持压入和弹出操作,不支持排序插入等操作。
activity的7个生命周期函数中的onstop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。部分遮挡一般是以消息activtiy的形式出现,这个只需在androidmanifest.xml中将其对于的activity的主题设置theme中更改即可。
这7个周期函数,当系统资源不够时,其中onpause(),onstop(),ondestroy()是有可能被系统kill掉的,但其它4个是不会被kill掉。
参考资料为mars老师的资料。
官方给出关于这7个生命周期的图如下:
Activity生命周期实例讲解
  

下面这个实验是有2个activity,第1个activity中有一个按钮调用第2个activity,并且每个activity都重写了这7个生命周期函数,每个生命周期中打印出一条语句,以表示是是哪个activity在执行哪个生命周期函数。
实验过程当显示出了第1个activity后,单击next activity!按钮,这是会显示第2个activity,然后又按系统的返回键,返回第1个界面。
这时候打印出来的结果如下图所示:
Activity生命周期实例讲解
 
由此可见,一开始程序运行时是首先调用第1个activity的oncreate(),onstart(),onresume()函数,然后按下button后,调用第1个activity的onpause(),和第2个activity的oncreate(),onstart(),onresume()函数,然后接着调用第1个activity的onstop(),当按下系统返回键时,这时会调用第2个activity的onpause(),接着是第1个activity的onrestart(),onstart(),onresume(), 最后是调用第2个的onstop()和ondestroy().
界面1如下所示:
 
Activity生命周期实例讲解 
mainactivity.java:

复制代码 代码如下:


package com.example.lifeone;

 

import android.app.activity;
import android.content.intent;
import android.os.bundle;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;

public class mainactivity extends activity {

    private button btn;
    @override
    public void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);

 btn = (button)findviewbyid(r.id.next_activity);
 btn.settext(r.string.next_activity);
 system.out.println("first activity: oncreate()");
 btn.setonclicklistener(new mynextactivity());
    }
    @override
    protected void ondestroy() {
 system.out.println("first activity: ondestroy()");
 super.ondestroy();
    }
    @override
    protected void onpause() {
 system.out.println("first activity: onpause()");
 super.onpause();
    }
    @override
    protected void onrestart() {
 system.out.println("first activity: onrestart()");
 super.onrestart();
    }
    @override
    protected void onresume() {
 system.out.println("first activity: onresume()");
 super.onresume();
    }
    @override
    protected void onstart() {
 system.out.println("first activity: onstart()");
 super.onstart();
    }
    @override
    protected void onstop() {
 system.out.println("first activity: onstop()");
 super.onstop();
    }

    class mynextactivity implements onclicklistener
    {
 public void onclick(view v) {
 intent intent = new intent();
 intent.setclass(mainactivity.this, secondactivity.class);
 mainactivity.this.startactivity(intent);
 }

    }
}



secondactivity.java:

复制代码 代码如下:


package com.example.lifeone;

 

import android.os.bundle;
import android.app.activity;
import android.view.menu;

public class secondactivity extends activity {

    @override
    public void oncreate(bundle savedinstancestate) {
 system.out.println("second activity:oncreate()");
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_second);
    }

    @override
    protected void ondestroy() {
 system.out.println("second activity: ondestroy()");
 super.ondestroy();
    }
    @override
    protected void onpause() {
 system.out.println("second activity: onpause()");
 super.onpause();
    }
    @override
    protected void onrestart() {
 system.out.println("second activity: onrestart()");
 super.onrestart();
    }
    @override
    protected void onresume() {
 system.out.println("second activity: onresume()");
 super.onresume();
    }
    @override
    protected void onstart() {
 system.out.println("second activity: onstart()");
 super.onstart();
    }
    @override
    protected void onstop() {
 system.out.println("second activity: onstop()");
 super.onstop();
    }

}