首页 > 代码库 > 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