Activity生命周期实例讲解

所属分类: 软件编程 / Android 阅读数: 678
收藏 0 赞 0 分享

 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个生命周期的图如下:

  

下面这个实验是有2个activity,第1个activity中有一个按钮调用第2个activity,并且每个activity都重写了这7个生命周期函数,每个生命周期中打印出一条语句,以表示是是哪个activity在执行哪个生命周期函数。
实验过程当显示出了第1个activity后,单击Next Activity!按钮,这是会显示第2个activity,然后又按系统的返回键,返回第1个界面。
这时候打印出来的结果如下图所示:

 
由此可见,一开始程序运行时是首先调用第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如下所示:
 
 
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();
    }

}

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多