Activity的启动模式

来源:互联网 发布:just we闹钟淘宝 编辑:程序博客网 时间:2024/06/16 12:07

  Activity有四种启动模式。在AndroidManifest中进行设置,在Activity中添加“launchMode”属性。属性值分别是Standrard,SingleTop, SingleTask, SingleINstance.

standard

  该启动模式是每开启一个Activity都会创建一个实例。例如:我们定义一个MainActivity,在MainActivity中设置一个按钮每点击一下,在进入一次MAinActivity。代码实现如下:

//MainActivitypublic class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        Log.d("Activity", this.toString());        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button btnSecond = (Button) findViewById(R.id.btnSecond);        btnSecond.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intentSecond = new Intent(MainActivity.this,MainActivity .class);                startActivity(intentSecond);            }        });    }}
//MAinActivity的布局文件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity"    android:orientation="vertical">    <Button        android:id="@+id/btnSecond"        android:text="Button"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>
//在Mainifest中注册,并设置启动模式。<activity            android:name=".MainActivity"            android:label="@string/app_name"            android:launchMode="standard" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

结果显示如下:
这里写图片描述

singleTop

  该启动模式是如果当前开启的Activity处于栈顶,则不会在创建新的实例,如果没有处于栈顶,则会创建一个新的实例。
  代码实现如下:

//MainActivitypublic class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        Log.d("Activity", this.toString());        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button btnSecond = (Button) findViewById(R.id.btnSecond);        btnSecond.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intentSecond = new Intent(MainActivity.this,MainActivity .class);                startActivity(intentSecond);            }        });    }}//SecondActivity
//MAinActivity的布局文件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity"    android:orientation="vertical">    <Button        android:id="@+id/btnSecond"        android:text="Button"        android:layout_width="match_parent"        android:layout_height="wrap_content" /></LinearLayout>
//在Mainifest中注册,并设置启动模式。<activity            android:name=".MainActivity"            android:label="@string/app_name"            android:launchMode="singleTop" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

结果显示如下:
这里写图片描述
  

singleTask

  该启动模式是如果当前开启的Activity处于栈顶,则不会在创建新的实例,如果没有处于栈顶,会将该Activity之上的所有Activity清除出栈,然后运行该Activity,所以也不会创建新的实例。在此不在进行代码演示。

singleInstance

  指定为singleInstance模式的活动会创建一个新的栈来存储自己。我们可以通过举例来理解该模式的应用场景:假设我们开发的应用中有一个活动是允许其他程序来调用的,我们想要其他程序调用的实例与我们自己程序调用该Activity的实例是同一个,以实现信息数据的共享。显然这个时候我们用其他三个变量是不可以的,所以我们可以使用singleInstance启动该Activity。

  (嘤嘤,博主今天比较懒,不在进行举例说明了哦,文字描述的还是可以的,将就看吧……)

0 0
原创粉丝点击