您的位置:首页 > 移动开发 > Android开发

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

2013-07-14 15:35 846 查看
<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次按钮:



----------------------------------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
”按钮



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

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

android:launchMode="singleTask"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: