Android开发入门之Activity的四种启动模式

<activity  android:name=".MainActivity"  android:launchMode="standard" />


standard:

这时默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。


singleTop:

如果在任务的栈顶正好存在该Activity的实例,就重用该实例(会调用实例的onNewIntent()),否则就会创建新的实例并放入栈顶(注:即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建实例)。


这里普及一下数据结构的知识:

栈是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表。表中允许进行插入、删除操作的一端称为栈顶。表的另一端称为栈底。栈顶的当前位置是动态的,对栈顶当前位置的标记称为栈顶指针。当栈中没有数据元素时,称之为空栈。栈的插入操作通常称为进栈或入栈,栈的删除操作通常称为退栈或出栈。


singleTask:

如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent()),重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。


singleInstance:

在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity的实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例(会调用实例的onNewIntent()),其效果相当于多个应用共享一个应用,不管谁激活该Activity都会进入同一个应用中。

----------------------------------standard---------------------------------------------------------------------

新建一个项目LaunchMode,在该项目的AndroidManifest.xml文件中的MainActivity配置

android:launchMode="standard"


activity_main.xml:

<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"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tv_standard"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="startActivity"
        android:text="@string/start_activity" />

</LinearLayout>

strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">启动模式</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="start_activity">激活standard模式Activity</string>

</resources>

MainActivity.java:

package cn.leigo.launchmode;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
	private TextView mStandardTextView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mStandardTextView = (TextView) findViewById(R.id.tv_standard);
		mStandardTextView.setText(this.toString());
	}

	public void startActivity(View v) {
		Intent intent = new Intent(this, MainActivity.class);
		startActivity(intent);
	}

}

运行点击3次按钮:

Android开发入门之Activity的四种启动模式_第1张图片


----------------------------------singleTop---------------------------------------------------------------------

android:launchMode="singleTop"

创建一个新的Activity,SingleTopActivity.java

package cn.leigo.launchmode;

import java.util.Date;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class SingleTopActivity extends Activity {
	private TextView mSingleTopTextView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_single_top);

		mSingleTopTextView = (TextView) findViewById(R.id.tv_singleTop);
		mSingleTopTextView.setText(this.toString());
	}

	public void startSingleTopActivity(View v) {
		Intent intent = new Intent(this, SingleTopActivity.class);
		startActivity(intent);
	}

	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		Toast.makeText(this, new Date().toLocaleString(), Toast.LENGTH_SHORT)
				.show();
	}

}

activity_single_top.xml:

<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"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tv_singleTop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="startSingleTopActivity"
        android:text="@string/start_singleTop_activity" />

</LinearLayout>

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">启动模式</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="start_activity">激活standard模式Activity</string>
    <string name="start_singleTop_activity">激活singleTop模式Activity</string>
    <string name="single_top">singleTop模式Activity</string>

</resources>

为activity_main.xml添加一个按钮:

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="startSingleTopActivity"
        android:text="@string/start_singleTop_activity" />

MainActivity,java:

	public void startSingleTopActivity(View v) {
		Intent intent = new Intent(this, SingleTopActivity.class);
		startActivity(intent);
	}

点击3次“

激活singleTop模式Activity
”按钮
Android开发入门之Activity的四种启动模式_第2张图片

点击第二个SingleTop的按钮,就会调用SingleTopActivity中的onNewIntent()方法。


----------------------------------singleTask---------------------------------------------------------------------

android:launchMode="singleTask"


你可能感兴趣的:(Android开发入门之Activity的四种启动模式)