“关于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 @Override 17 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 @Override 30 protected void onStart() { 31 Log.i(TAG, "onStart()"); 32 super.onStart(); 33 } 34 35 @Override 36 protected void onRestart() { 37 Log.i(TAG, "onRestart()"); 38 super.onRestart(); 39 } 40 41 @Override 42 protected void onResume() { 43 Log.i(TAG, "onResume()"); 44 super.onResume(); 45 } 46 @Override 47 protected void onPause() { 48 Log.i(TAG, "onPasue()"); 49 super.onPause(); 50 } 51 @Override 52 protected void onStop() { 53 Log.i(TAG, "onStop()"); 54 super.onStop(); 55 } 56 @Override 57 protected void onDestroy() { 58 Log.i(TAG, "onDestroy()"); 59 super.onDestroy(); 60 } 61 @Override 62 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 <application 12 android:allowBackup="true" 13 android:icon="@drawable/ic_launcher" 14 android:label="@string/app_name" 15 android:theme="@style/AppTheme" > 16 <activity 17 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