Activity作为Android中重要一环,它有4种不同的启动模式,类似于C语言中的局部变量、全局变量及静态变量等。这4种启动模式如下。
        ·standard:标准模式,调用startActivity()方法就会产生一个新的实例。
        ·singleTop:检查是否已经存在了一个实例位于Activity Stack的顶部,如果存在就不产生新的实例,反之则调用Activity的newInstance()方法产生一个新实例。
        ·singleTask:在一个新的Task中产生这个实例,以后每次调用都会使用此实例,而避免产生新的实例。
        ·singleInstance:这个基本上跟singleTask一样,只是有一点不同,那就是在这个模式下的Activity实例所处的Task中,只能有这一个Activity实例,而不能有其他的实例。
        这些启动模式在Android清单文件AndroidManifest.xml中,通过中的launchMode属性进行设置,如代码清单1-1所示。
        代码清单1-1  AndroidManifest.xml
        
            <activity android:name=".Activity2" 
		                android:launchMode="singleTask"></activity>
        
        也可以在Eclipse ADT图形界面中编辑,如图1-1所示。
        
图1-1  设置Activity启动模式
        下面通过一个简单的例子——LaunchMode_Test来对四种启动模式进行简要分析,在该例中涉及Fx_Main、Activity2及Activity3三个Activity。下面介绍一下例子中涉及的三个Activity及其界面。
        首先是Fx_Main,其界面如图1-2所示。
        
图1-2 Fx_Main的界面
 
        在图1-2所示的界面中,单击"跳转到AC2"按钮之后,跳转至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"按钮,则跳转至Fx_Main,而单击"跳到本页面"则仍显示Activity2的界面,单击"跳到AC3"则跳转到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"则跳转至Fx_Main,单击"返回AC2",则跳转到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的四种启动模式有了初步的认识,那么,这四种启动模式有什么区别呢?我们明天的免费资料会给大家进一步作出讲解!