首页 > 代码库 > Android技术3:Activity生命周期

Android技术3:Activity生命周期

“关于Android Activity的生命周期”这个是android中一个重要的知识点,也是Android面试中出现最多的面试题。下面将介绍android中Activity的生命周期。

1.Activity几种状态

1.1Active(活动):当Activity位于栈顶时,它是可见,有焦点的前台Activity,可以用来响应用户的输入。

1.2Paused(暂停):一般情况,你的Activity可见但不具有焦点,例如 当前面的Activity是全透明或非透明的Activity时,下面的Activity就位于Paused状态。

1.3Stopped(停止):当一个Activity彻底不可见时,就处于这个状态。此时Activity完全不可见,但在内存中仍旧保留该Activity的状态和成员信息。

1.4Inactive(销毁):当一个Activity被杀死时,就变成Inactive。Inactive Activity会从Activity栈中移除,如果重新显示需要重新启动。一般销毁由系统Dalvik控制。

 

2.Activity状态图

主要包含onCreate(),onStart(),onResume(),onPause(),onStop(),onDestroy()几个函数,所有状态的变化是由Android内存管理器决定。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.Activity生命周期每个函数的解析

3.1void onCreate(Bundle saveInstanceState)

该函数是该Activity第一次启动时调用,且启动后就不在执行,除非由于系统内存紧张,把处于Paused和Stopped状态下的Activity回收,然后再重新启动。

它有个形式参数saveInstanceState,它主要保存Activity由于系统内存不足等原因,被系统隐式销毁Activity,在被销毁之前一般的会调用onSaveInstanceState(),保留该Activity此时的状态信息。该方法中传入Bundle参数,系统会保留,当再次启动时,通过onCreate()方法传入。

3.2onStart()

一般情况下,该方法是在onCreate()之后调用或者在Stopped状态返回时调用。用户重新查看窗体时会执行。

3.3onResume()

启动过程成执行onCreate()-->onStart()-->onResume()或者 当Activity处于Stopped状态onStopped()-->onResume()

当Activity处于Paused状态时onPause()-->onResume()

3.4onPause()

一般窗体被交换到后台时执行onPause(),一般在onPause()中保存永久性数据。

3.5onStop()

onPause()-->onStop()。  Activity页面切换,或者用户直接按Back键,将该窗体从当前任务重移除,也会执行onStop()

3.6onRestart()

onStop()执行之后,该窗体和进程没有被系统销毁,此时用户又重新查看该窗体,则会执行窗体的onRestart()--->onStart()

3.7onDestroy()

Activity被销毁时执行onDestroy()。

 

4.Activity几个场景

下面用例子分别演示几个情况。

代码如下

MainActivity.java

 1 package com.forsta.life; 2  3 import android.app.Activity; 4 import android.content.Intent; 5 import android.os.Bundle; 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     private Button bt1;13     private Button bt2;14     private Button bt3;15     private static final String TAG="MainActivity";16     @Override17     protected void onCreate(Bundle savedInstanceState) {18         Log.i(TAG, "onCreate()");19         super.onCreate(savedInstanceState);20         setContentView(R.layout.activity_main);21         bt1=(Button) findViewById(R.id.bt1);22         bt2=(Button) findViewById(R.id.bt2);23         bt3=(Button) findViewById(R.id.bt3);24         bt1.setOnClickListener(this);25         bt2.setOnClickListener(this);26         bt3.setOnClickListener(this);27     }28     29     @Override30     protected void onStart() {31         Log.i(TAG, "onStart()");32         super.onStart();33     }34     35     @Override36     protected void onRestart() {37         Log.i(TAG, "onRestart()");38         super.onRestart();39     }40     41     @Override42     protected void onResume() {43         Log.i(TAG, "onResume()");44         super.onResume();45     }46     @Override47     protected void onPause() {48         Log.i(TAG, "onPasue()");49         super.onPause();50     }51     @Override52     protected void onStop() {53         Log.i(TAG, "onStop()");54         super.onStop();55     }56     @Override57     protected void onDestroy() {58         Log.i(TAG, "onDestroy()");59         super.onDestroy();60     }61     @Override62     public void onClick(View v) {63         int id=v.getId();64         switch(id){65         case R.id.bt1:66             Intent intent=new Intent(getApplicationContext(), ActivityA.class);67             startActivity(intent);68             break;69         case R.id.bt2:70             Intent intent1=new Intent(getApplicationContext(), ActivityB.class);71             startActivity(intent1);72             break;73         case R.id.bt3:74             finish();75             break;76         default:break;77         }78         79     }80 81 82 }

ActivityA.java

 1 package com.forsta.life; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5  6 public class ActivityA extends Activity { 7     @Override 8     protected void onCreate(Bundle savedInstanceState) { 9         super.onCreate(savedInstanceState);10         setContentView(R.layout.a);11     }12 }

ActivtyB.java

 1 package com.forsta.life; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5  6 public class ActivityB extends Activity { 7     @Override 8     protected void onCreate(Bundle savedInstanceState) { 9         super.onCreate(savedInstanceState);10         setContentView(R.layout.b);11     }12 }

AndroidManifest.xml

 1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3     package="com.forsta.life" 4     android:versionCode="1" 5     android:versionName="1.0" > 6  7     <uses-sdk 8         android:minSdkVersion="8" 9         android:targetSdkVersion="18" />10 11     <application12         android:allowBackup="true"13         android:icon="@drawable/ic_launcher"14         android:label="@string/app_name"15         android:theme="@style/AppTheme" >16         <activity17             android:name="com.forsta.life.MainActivity"18             android:label="@string/app_name" >19             <intent-filter>20                 <action android:name="android.intent.action.MAIN" />21 22                 <category android:name="android.intent.category.LAUNCHER" />23             </intent-filter>24         </activity>25         <activity android:name="com.forsta.life.ActivityA" android:theme="@android:style/Theme.Dialog"></activity>26         <activity android:name="com.forsta.life.ActivityB"></activity>27     </application>28 29 </manifest>

界面:

启动Activity

 

Paused状态转换

返回

Stopped状态转变

点击按钮跳转到ActicityB

按下Back键返回

Inactive状态转变

直接调用finish方法

 

下载:

http://pan.baidu.com/s/1qWPnPdM