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     @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

Android技术3:Activity生命周期,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。