Android学习整理之Activity生命周期篇

一、Activity生命周期说明

   Activity的四种状态:

  ⒈活动状态(Active or Running):也称为运行状态,处于Activity栈顶,在用户界面中最上层,完全能被用户看到,能够与用户进行交互;

  ⒉ 暂停状态(Paused):Activity失去焦点,Activity界面被部分遮挡,该Activity不再处于用户界面的最上层,且不能够与用户进行交互。一个暂停状态的Activity依然保持活力(保持所有的状态,成员信息,与窗口管理器保持连接),但是在系统内存不够用的时候将被杀掉;
  ⒊停止状态(Stopped):Activity在界面上完全不能被用户看到,也就是说这个Activity被其他Activity全部遮挡,但它依然保持所有状态和成员信息,只是它不再可见,它的窗口被隐藏;
  ⒋非活动状态(Killed):当系统内存需要被用在其他地方的时候,一个停止状态的Activity被杀掉。
  如果一个Activity是Paused或者Stopped状态时可以被恢复,也可以被删除。一个被删除(杀掉)的Activity如果需要重新恢复就需要重启。

  当一个activity的当前状态发生改变时,当前activity就会触发一系列的回调方法。这些回调方法很明白的阐述了activity生命周期的变化过程。

  这些方法分别为:onCreat();onstart();onResume;onPause();onStop();onRestart();onDestroy();

二、生命周期图解说明

 Android学习整理之Activity生命周期篇

这张图,相信学习过android开发的大牛们都非常的熟悉了,但我还是图解一下:

1、当一个activity启动时,首先会调用onCreat();方法,然后调用onStart();方法,接下来调用onResume();方法。进入activity界面,此时的activity处于Running状态。

2、当一个不是全屏的activity被启动时(即当前activity被不完全遮住,dialog除外),那么当前activity首先会执行onPause();方法,当不是全屏的activity被从栈顶移除是,那么activity会执行onResume();方法。

3、当当前activity被新的activity完全覆盖时,或者按home回到主界面时,当前activity会执行,onPause(),onStop();方法,当回到当前activity时,会执行onRestart();onstart();onResume();方法。

4、当用户退出当前activity时会执行onPause();onStop();最后执行onDestroy();方法。

三、程序示例解释说明

 

  1 package org.david.activitylifecycle;

  2 

  3 import android.os.Bundle;

  4 import android.app.Activity;

  5 import android.content.Intent;

  6 import android.util.Log;

  7 import android.view.View;

  8 import android.view.View.OnClickListener;

  9 import android.widget.Button;

 10 

 11 public class MainActivity extends Activity implements OnClickListener {

 12 

 13     private static final String TAG = MainActivity.class.getSimpleName();

 14     private Button btn_next, btn_halfActivity;

 15 

 16     @Override

 17     protected void onCreate(Bundle savedInstanceState) {

 18         super.onCreate(savedInstanceState);

 19         Log.i(TAG, "onCreate()");

 20         setContentView(R.layout.activity_main);

 21 

 22         // init---view

 23         btn_next = (Button) findViewById(R.id.btn_next);

 24         btn_halfActivity = (Button) findViewById(R.id.btn_halfActivity);

 25         btn_next.setOnClickListener(this);

 26         btn_halfActivity.setOnClickListener(this);

 27 

 28     }

 29 

 30     @Override

 31     public void onClick(View v) {

 32         switch (v.getId()) {

 33         case R.id.btn_next:

 34             Intent intent = new Intent(this, SecondActivity.class);

 35             startActivity(intent);

 36             break;

 37         case R.id.btn_halfActivity:

 38             Intent intent2 = new Intent(this,HalfActivity.class);

 39             startActivity(intent2);

 40             break;

 41 

 42         }

 43     }

 44 

 45     @Override

 46     protected void onStart() {

 47         super.onStart();

 48         Log.i(TAG, "onstart()");

 49     }

 50 

 51     @Override

 52     protected void onRestart() {

 53         super.onRestart();

 54         Log.i(TAG, "onRestart()");

 55     }

 56 

 57     @Override

 58     protected void onResume() {

 59         super.onResume();

 60         Log.i(TAG, "onResume()");

 61     }

 62 

 63     @Override

 64     protected void onPause() {

 65         super.onPause();

 66         Log.i(TAG, "onPause()");

 67     }

 68 

 69     @Override

 70     protected void onStop() {

 71         super.onStop();

 72         Log.i(TAG, "onStop()");

 73     }

 74 

 75     @Override

 76     protected void onDestroy() {

 77         super.onDestroy();

 78         Log.i(TAG, "onDestroy()");

 79     }

 80 

 81     @Override

 82     protected void onRestoreInstanceState(Bundle savedInstanceState) {

 83         super.onRestoreInstanceState(savedInstanceState);

 84         Log.i(TAG, "onRestoreInstanceState()");

 85     }

 86 

 87     @Override

 88     protected void onNewIntent(Intent intent) {

 89         super.onNewIntent(intent);

 90         Log.i(TAG, "onNewIntent()");

 91     }

 92 

 93     @Override

 94     protected void onSaveInstanceState(Bundle outState) {

 95         super.onSaveInstanceState(outState);

 96         Log.i(TAG, "onSaveInstanceState()");

 97     }

 98     

 99 

100 }

1、当前activity启动:

2、当启动一个新的activity,或者按home键:

注意:onSaveInstanceState();方法在onStop()之前调用,在onPause()之后调用。

   这个地方与我之前看到过的一篇博客有出入,难道是sdk版本的问题?希望有知道的朋友给我解答下。

3、再次回到当前activity时,即由后台转到前台:

4、修改HalfActivity在AndroidManifest.xml中的配置,将android:theme属性设置为@android:style/Theme.Dialog。使之成为一个不全屏的activity。

有当前activity进入到HalfActivity:

 

再由HalfActivity退回当前activity:

5、当屏幕发生变化时,activity的生命周期也是会发生变化的。由竖屏----->横评和由横评----->竖屏生命周期的变化是一样的:

Android学习整理之Activity生命周期篇

 

总结:理解生命周期对我们处理交互界面有大的帮助,同时也能使我们的程序更加的健壮。希望我们都能够有一个很好的理解。

补充:上篇中的activity的数据传递遗漏一种情况,这里补充一下:startActivityForResult(Intent, int);

MainActivity.java

1 Intent intent2 = new Intent(this,HalfActivity.class);

2             startActivityForResult(intent2, REQUEST_OK);
1     @Override

2     protected void onActivityResult(int requestCode, int resultCode, Intent data) {

3         super.onActivityResult(requestCode, resultCode, data);

4         if(requestCode==REQUEST_OK){

5             String getData = data.getStringExtra("hello");

6             System.out.println(getData);

7         }

8     }

HalfActivity.java

1 tv_hello=(TextView) findViewById(R.id.tv_hello);

2         Intent intent = new Intent();

3         intent.putExtra("hello", tv_hello.getText().toString());

4         setResult(MainActivity.REQUEST_OK, intent);

 

感悟:北京已经连续一个星期的雾霾天气了,真心是让人感到心烦啊!!!

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Android学习)