Activity作為Android中重要一環(huán),它有4種不同的啟動模式,類似于C語言中的局部變量、全局變量及靜態(tài)變量等。這4種啟動模式如下。
·standard:標準模式,調(diào)用startActivity()方法就會產(chǎn)生一個新的實例。
·singleTop:檢查是否已經(jīng)存在了一個實例位于Activity Stack的頂部,如果存在就不產(chǎn)生新的實例,反之則調(diào)用Activity的newInstance()方法產(chǎn)生一個新實例。
·singleTask:在一個新的Task中產(chǎn)生這個實例,以后每次調(diào)用都會使用此實例,而避免產(chǎn)生新的實例。
·singleInstance:這個基本上跟singleTask一樣,只是有一點不同,那就是在這個模式下的Activity實例所處的Task中,只能有這一個Activity實例,而不能有其他的實例。
這些啟動模式在Android清單文件AndroidManifest.xml中,通過中的launchMode屬性進行設(shè)置,如代碼清單1-1所示。
代碼清單1-1 AndroidManifest.xml
<activity android:name=".Activity2"
android:launchMode="singleTask"></activity>
也可以在Eclipse ADT圖形界面中編輯,如圖1-1所示。

圖1-1 設(shè)置Activity啟動模式
下面通過一個簡單的例子——LaunchMode_Test來對四種啟動模式進行簡要分析,在該例中涉及Fx_Main、Activity2及Activity3三個Activity。下面介紹一下例子中涉及的三個Activity及其界面。
首先是Fx_Main,其界面如圖1-2所示。

圖1-2 Fx_Main的界面
在圖1-2所示的界面中,單擊"跳轉(zhuǎn)到AC2"按鈕之后,跳轉(zhuǎn)至Activity2,具體代碼如代碼清單1-2所示。
代碼清單1-2 Fx_Main.Activity
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Fx_Main extends Activity {
/** Called when the activity is first created. */
private Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv=(TextView)findViewById(R.id.TextView01);
tv.setText("Main---->"+getTaskId());
Log.i("System.out", "Main---->"+this.toString()+"Task ID---->"+getTaskId());
b=(Button)findViewById(R.id.Button01);
b.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i=new Intent(Fx_Main.this,Activity2.class);
startActivity(i);
}});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i("System.out", "Fx_Main--->Destory");
}
}
其次是Activity2,其界面如圖1-3所示。

圖1-3 Activity2的界面
在該界面中,單擊"跳回到Main"按鈕,則跳轉(zhuǎn)至Fx_Main,而單擊"跳到本頁面"則仍顯示Activity2的界面,單擊"跳到AC3"則跳轉(zhuǎn)到Activity3的界面,具體代碼如代碼清單1-3所示。
代碼清單1-3 Activity2.Activity
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Activity2 extends Activity {
private Button b;
private Button b2;
private Button b3;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity2);
b=(Button)findViewById(R.id.Button02);
b2=(Button)findViewById(R.id.Button03);
b3=(Button)findViewById(R.id.Button04);
TextView tv=(TextView)findViewById(R.id.TextView02);
tv.setText("Ac2---->"+getTaskId());
Log.i("System.out", "Ac2---->"+this.toString()+"Task ID---->"+getTaskId());
b.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i=new Intent(Activity2.this,Fx_Main.class);
startActivity(i);
}});
b2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i=new Intent(Activity2.this,Activity2.class);
startActivity(i);
}});
b3.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i=new Intent(Activity2.this,Activity3.class);
startActivity(i);
}});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i("System.out", "Ac2--->destory");
}
}
后是Activity3,其界面如圖1-4所示。

圖1-4 Activity3的界面
如圖1-4所示,單擊"返回Main"則跳轉(zhuǎn)至Fx_Main,單擊"返回AC2",則跳轉(zhuǎn)到Activity2。具體代碼如代碼清單1-5所示。
代碼清單1-5 Activity3.Activity
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class Activity3 extends Activity {
private Button b;
private Button b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity3);
b=(Button)findViewById(R.id.Button03);
b2=(Button)findViewById(R.id.Button04);
TextView tv=(TextView)findViewById(R.id.TextView03);
tv.setText("Ac3---->"+getTaskId());
Log.i("System.out", "Ac3---->"+this.toString()+"Task ID---->"+getTaskId());
b.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i=new Intent(Activity3.this,Fx_Main.class);
startActivity(i);
}});
b2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i=new Intent(Activity3.this,Activity2.class);
startActivity(i);
}});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i("System.out", "Ac3--->Destory");
}
}
通過上文LaunchMode_Test這個簡單的例子,相信大家對于Android Activity的四種啟動模式有了初步的認識,那么,這四種啟動模式有什么區(qū)別呢?我們明天的免費資料會給大家進一步作出講解!