安卓activity生命周期

         在我刚开始学习安卓时,对安卓程序运行的过程还不是很清楚,后来通过各方面的资料我了解了一些关于activity的知识,在这里记录一下。

        Activity是由Activity栈方式进行管理,先进后出。

        先看一张经典的图吧

        

         刚开始写安卓程序时,我只重写了onCreate(),对其它的不是很了解,当了解一些关于生命周期的知识后,我才对它们有所认识,通俗来讲一个Activity在运行时,一般onCreate() - onStart() - onResume(),当它位于屏幕的最前方时,一般就到这一步,而当Activity变成透明的或者没有覆盖整个屏幕时会执行onPause()方法,当Activity完全被其他Activity完全覆盖时,会执行onstop(),当Activity由于某种原因被销毁时会执行onDestroy()方法。

         最简单的Activity生命周期是onCreate() - onStart() - onResume() - onPause() - onStop() - onDestroy,简称为entire lifetime。

   

        当activity在调用onCreate()时,Activity不可见,在onResume()到OnStop()之前,activity是可见的,Onstop()后Activity是不可见的,但可以通过回调OnResume()方法,再次让这个Activity可见。

       下面是用来测试Activity的生命周期的一个简单程序

      每个界面都有两个按钮可以跳转到其他两个界面

      but1 (View view) but2(View view) 等是点击按钮会执行的跳转方法;

      MainActivity_2的theme是设置成半透明的,不会覆盖原来在栈顶的Activity,

      由于每跳转一次是new 一个Intent,所以每次会重新执行OnCreate() - Onstart() - OnResume()

    还有几种情况,

     当你点击安卓虚拟机上的返回时,会把之前栈顶的Activity执行OnPause() - OnStop() -   OnDestroy()方法

     当你点击home键时,会返回桌面,执行OnPause() - OnStop(),这两个键的区别就是OnDestroy()方法是否执行

    当你长按home键时,不会改变Activity的生命周期

     MainActivity.java

      package com.example.lifecycle;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;


public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
System.out.println("Activity0在oncreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


@Override
protected void onStart() {
super.onStart();
System.out.println("Activity0在onStart");
}


@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
System.out.println("Activity0在onResume");
}


@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("Activity0在onPause");
}


@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("Activity0在onstop");
}


@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("Activity0在onDestroy");
}


// Activity窗口获得或失去焦点时被调用,在onResume之后或onPause之后


public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
System.out.println("Activity0在onWindowFocusChanged");
}


/**
* Activity被系统杀死时被调用. 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死.
* 另外,当跳转到其他Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态. 在onPause之前被调用.
*/


protected void onSaveInstanceState(Bundle outState) {
System.out.println("Activity0在onSaveInstanceState");
super.onSaveInstanceState(outState);
}


/**
* Activity被系统杀死后再重建时被调用.
* 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity.
* 这两种情况下onRestoreInstanceState都会被调用,在onStart之后.
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
System.out.println("Activity0在onRestoreInstanceState");
super.onRestoreInstanceState(savedInstanceState);
}


public void but1(View view) {
Intent intent = new Intent();
intent.setClass(this, MainActivity_1.class);
this.startActivity(intent);
}


public void but2(View view) {
Intent intent = new Intent();
intent.setClass(this, MainActivity_2.class);
this.startActivity(intent);
}

    MainActivity_1.java

       package com.example.lifecycle;


import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;


public class MainActivity_1 extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
System.out.println("Activity1在oncreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity_1);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_activity_1, menu);
return true;
}


protected void onStart() {
super.onStart();
System.out.println("Activity1在onStart");
}


@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
System.out.println("Activity1在onResume");
}


@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.out.println("Activity1在onPause");
}


@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
System.out.println("Activity1在onstop");
}


@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("Activity1在onDestroy");
}


// Activity窗口获得或失去焦点时被调用,在onResume之后或onPause之后


public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
System.out.println("Activity1在onWindowFocusChanged");
}


/**
* Activity被系统杀死时被调用. 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死.
* 另外,当跳转到其他Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态. 在onPause之前被调用.
*/


protected void onSaveInstanceState(Bundle outState) {
System.out.println("Activity1在onSaveInstanceState");
super.onSaveInstanceState(outState);
}


/**
* Activity被系统杀死后再重建时被调用.
* 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity.
* 这两种情况下onRestoreInstanceState都会被调用,在onStart之后.
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
System.out.println("Activity1在onRestoreInstanceState");
super.onRestoreInstanceState(savedInstanceState);
}


public void but3(View view) {
Intent intent = new Intent();
intent.setClass(this, MainActivity.class);
this.startActivity(intent);
}


public void but4(View view) {
Intent intent = new Intent();
intent.setClass(this, MainActivity_2.class);
this.startActivity(intent);
}
}


    MainActivity_2.java

package com.example.lifecycle;


import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;


public class MainActivity_2 extends Activity {


protected void onCreate(Bundle savedInstanceState) {
System.out.println("Activity2在oncreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity_2);
}


public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_activity_2, menu);
return true;
}


protected void onStart() {
super.onStart();
System.out.println("Activity2在onStart");
}


protected void onResume() {
super.onResume();
System.out.println("Activity2在onResume");
}


protected void onPause() {
super.onPause();
System.out.println("Activity2在onPause");
}


protected void onStop() {
super.onStop();
System.out.println("Activity2在onstop");
}


protected void onDestroy() {
super.onDestroy();
System.out.println("Activity2在onDestroy");
}


// Activity窗口获得或失去焦点时被调用,在onResume之后或onPause之后


public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
System.out.println("Activity2在onWindowFocusChanged");
}


/**
* Activity被系统杀死时被调用. 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死.
* 另外,当跳转到其他Activity或者按Home键回到主屏时该方法也会被调用,系统是为了保存当前View组件的状态. 在onPause之前被调用.
*/


protected void onSaveInstanceState(Bundle outState) {
System.out.println("Activity2在onSaveInstanceState");
super.onSaveInstanceState(outState);
}


/**
* Activity被系统杀死后再重建时被调用.
* 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity.
* 这两种情况下onRestoreInstanceState都会被调用,在onStart之后.
*/


protected void onRestoreInstanceState(Bundle savedInstanceState) {
System.out.println("Activity2在onRestoreInstanceState");
super.onRestoreInstanceState(savedInstanceState);
}


public void but5(View view) {
Intent intent = new Intent();
intent.setClass(this, MainActivity.class);
this.startActivity(intent);
}


public void but6(View view) {
Intent intent = new Intent();
intent.setClass(this, MainActivity_1.class);
this.startActivity(intent);
}
}

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值