您的位置:华清远见教育科技集团 >> Android资料 >> Android Activity的四种启动模式  
 
Android Activity的四种启动模式
分享到:

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的四种启动模式有了初步的认识,那么,这四种启动模式有什么区别呢?我们明天的免费资料会给大家进一步作出讲解!

 更多相关文章

·Activity的生命周期回调方法
·图解Android Activity生命周期
·Android应用组件Activity
·Android进程的生命周期
·Android常用组件生命周期