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>
相关文章推荐
- Android—Activity的四种启动模式及区别
- # Android中Activity四种启动模式和taskAffinity属性详解 #(1)
- Android:Activity四种启动模式
- Activity四种启动模式
- android进阶之旅,初级试水型探索(activity四种启动模式详解)
- Android下的Activity的四种启动模式
- Activity的四种启动模式
- Activity四种启动模式
- Activity_四种启动模式
- Android基础——Activity的四种启动模式
- 关于Activity的四种启动模式详解
- Activity四种启动模式
- Activity的四种启动模式:
- Andorid的Activity的四种启动模式详解
- Activity四种启动模式
- Activity的四种启动模式
- Android中Activity四种启动模式和taskAffinity属性详解
- Activity中的四种启动模式
- Activity的四种启动模式
- Activity的四种启动模式