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

Activity的四种启动模式

2013-07-23 15:10 309 查看

Activity的四种启动模式

示例代码如下:
1.java代码:
package com.main;

import com.other.SingleTaskActivity;
import com.other.SingleTopActivity;
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 {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

TextView textView = (TextView) this.findViewById(R.id.textView);
textView.setText(this.toString());
}
//Standard模式的
/*默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中;
* */
public void openStandardActivity(View v){
startActivity(new Intent(this, MainActivity.class));
}
//SingleTop模式的.
/*如果在任务的栈顶正好存在该Activity的实例,
* 就重用该实例(会调用实例的 onNewIntent()方法),否则就会创建新的实例并放入栈顶.
* 即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。*/
public void openSingleTopActivity(View v){
startActivity(new Intent(this, SingleTopActivity.class));
}
//SingleTask模式
/*如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。
* 重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。
* 如果栈中不存在该实例,将会创建新的实例放入栈中。*/
public void openSingleTaskActivity(View v){
startActivity(new Intent(this, SingleTaskActivity.class));
}
//Singleinstance模式
/*在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。
* 一旦该模式的Activity实例已经存在于某个栈中,
* 任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。
* 其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。*/
public void openSingleIntanceActivity(View v){
Intent intent = new Intent();
intent.setClassName("cn.itcast.singleinstance", "cn.itcast.singleinstance.SingleInstanceActivity");
startActivity(intent);
}

}

/*Standard,SingleTop,SingleTask是存在于同一个任务栈中的,只是实例化的策略不同.
* 其中SingleTask只要栈中有实例就不会再创建实例,
* 而另外两种即使栈中已经有了它们的实例
* 只要满足一定的条件它们都会创建新的实例。
* SingleInstance模式被分配到一个单独的栈中。*/

package com.other;

import com.main.MainActivity;
import com.main.R;

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 SingleTaskActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.singletask);

TextView textView = (TextView) this.findViewById(R.id.singeltaskView);
textView.setText(this.toString());
}
@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
Toast.makeText(this, "调用了OnNewIntent()方法,", Toast.LENGTH_SHORT).show();
}
//在SingleTaskActivity启动SingleTaskActivity。
public void openSingleTaskActivity(View v){
startActivity(new Intent(this, SingleTaskActivity.class));
}
//在MainActivity里启动MainActivity。
public void openMainActivity(View v){
startActivity(new Intent(this, MainActivity.class));
}
}

package com.other;
import com.main.R;

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 {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.singletop);

TextView textView = (TextView) this.findViewById(R.id.singeltopView);
textView.setText(this.toString());
}

@Override
protected void onNewIntent(Intent intent) {
Toast.makeText(this, "调用了OnNewIntent方法;" +
"已经在栈顶了,不再创建新的Activity实例。", Toast.LENGTH_SHORT).show();
super.onNewIntent(intent);
}

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

}


2.相关配置文件.
AndroidMainFest.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.main"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.main.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>
<activity
android:name="com.other.SingleTopActivity"
android:label="@string/singletoptitle"
android:launchMode="singleTop" >
</activity>
<activity
android:name="com.other.SingleTaskActivityy"
android:label="@string/singletasktitle"
android:launchMode="singleTask" >
</activity>
</application>

</manifest>
main.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/textView"
/>
<!-- Standard模式的 -->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/standard"
android:onClick="openStandardActivity"
/>
<!-- SingleTop模式的 -->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/singletop"
android:onClick="openSingleTopActivity"
/>
<!-- SingleTask模式的 -->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/singletask"
android:onClick="openSingleTaskActivity"
/>
<!-- Singleinstance模式的 -->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/singleintance"
android:onClick="openSingleIntanceActivity"
/>
</LinearLayout>
singletask.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/singeltaskView"
/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/singletask"
android:onClick="openSingleTaskActivity"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/singletask2"
android:onClick="openMainActivity"
/>
</LinearLayout>
singletop.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:id="@+id/singeltopView"
/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/singletop"
android:onClick="openSingleTopActivity"
/>
</LinearLayout>
strings.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="hello">Hello World, MainActivity!</string>
<string name="app_name">LaunchMode</string>
<string name="standard">激活standard模式Activity</string>
<string name="singletop">激活SingleTop模式Activity</string>
<string name="singletoptitle">SingleTop模式Activity</string>
<string name="singletasktitle">SingleTask模式Activity</string>
<string name="singletask">激活SingleTask模式Activity</string>
<string name="singletask2">激活SingleTask模式Activity_2</string>
<string name="singleintance">激活SingleInstance模式Activity</string>

</resources>


3.SingleInstance模式可以让Activity在不同的应用之间共享。所以这里用到的第二个应用是(这个应用里有Activity的启动模式是SingleInstance的,所以上一个应用可以用这个应用的以SingleInstance模式启动的Activity):
package cn.itcast.singleinstance;

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

public class SingleInstanceActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

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

@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub

super.onNewIntent(intent);
Toast.makeText(this, "调用了SingleInstance模式的Activity的OnNewIntent方法", Toast.LENGTH_SHORT).show();
}
}


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"

/>

</LinearLayout>


AndroidMainFest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.itcast.singleinstance"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" />

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".SingleInstanceActivity"
android:launchMode="singleInstance"
>
<intent-filter >
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LaunchMode Android